公众号后台回复“面试”,获取精品学习资料

扫描下方海报了解专栏详情

本文来源:
https://blog.csdn.net/u011541946/article/details/79865160
《Java工程师面试突击(第3季)》重磅升级,由原来的70讲增至160讲,内容扩充一倍多,升级部分内容请参见文末
package string;
public class Demo2_String {
public static void main(String[] args) {
String st1 = "abc";
String st2 = "abc";
System.out.println(st1 == st2);
System.out.println(st1.equals(st2));
}
}
输出结果:
第一行:true
第二行:true
分析:
null,并且是与此对象表示相同字符序列的
String对象时,结果才为
true。” 注意这个相同字符序列,在后面介绍的比较两个数组,列表,字典是否相等,都是这个逻辑去写代码实现。

内存过程大致如下:
运行先编译,然后当前类Demo2_String.class文件加载进入内存的方法区
第二步,main方法压入栈内存
常量池创建一个“abc”对象,产生一个内存地址
然后把“abc”内存地址赋值给main方法里的成员变量st1,这个时候st1根据内存地址,指向了常量池中的“abc”。
前面一篇提到,常量池有这个特点,如果发现已经存在,就不在创建重复的对象
运行到代码 Stringst2 =”abc”, 由于常量池存在“abc”,所以不会再创建,直接把“abc”内存地址赋值给了st2
最后st1和st2都指向了内存中同一个地址,所以两者是完全相同的。
2. 下面这句话在内存中创建了几个对象
String st1 = new String(“abc”);

String对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
package string;
public class Demo2_String {
public static void main(String[] args) {
String st1 = new String("abc");
String st2 = "abc";
System.out.println(st1 == st2);
System.out.println(st1.equals(st2));
}
}

4. 判定以下定义为String类型的st1和st2是否相等
package string;
public class Demo2_String {
public static void main(String[] args) {
String st1 = "a" + "b" + "c";
String st2 = "abc";
System.out.println(st1 == st2);
System.out.println(st1.equals(st2));
}
}
5、判断以下st2和st3是否相等
package string;
public class Demo2_String {
public static void main(String[] args) {
String st1 = "ab";
String st2 = "abc";
String st3 = st1 + "c";
System.out.println(st2 == st3);
System.out.println(st2.equals(st3));
}
}
答案:false 和 true
分析:


大致内存过程
总结:
END
《Java工程师面试突击第三季》加餐部分大纲:(注:1-66讲的大纲请扫描文末二维码,在课程详情页获取)



详细的课程内容,大家可以扫描下方二维码了解:

最后修改时间:2020-04-20 08:04:06
文章转载自石杉的架构笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




