内存中的对象引用有点难理解

来源:6-12 Java内存模型之常考题解析-2

慕雪6307026

2019-07-27

Q1:
String s1 = new String(“aa”);
String s2 = “aa”;
//s1==s2为false
是因为s1指向的是堆中的对象,而s2指向的是常量池中的"aa"吗?

Q2:
String s1 = new String(“a”) + new String(“a”);
String s2 = “aa”;
//s1==s2为false
是因为s1指向的是堆中的"aa"对象,而s2是指向的是常量池中的"aa"吗?

Q3: JDK6和JDK6+中intern()方法的区别, 可以这样理解吗?
JDK6: 对于某个字符串对象,如果之前在常量池中已存在该对象,执行intern()方法返回的是该对象在常量池中的副本。若不存在,则创建该字符串对象的副本,放入常量池中并返回。
JDK6+: 对于某个字符串对象,如果之前在常量池中已存在该对象,执行intern()方法返回的是该对象在常量池中的引用。若不存在,则在堆中寻找该对象的引用,找到就返回;找不到就在堆中创建该字符串对象,并将其引用放入常量池,然后返回。

写回答

1回答

翔仔

2019-07-27

同学好,你的这几点理解是ok的

0
1
慕雪6307026
我觉得结合这3个例子,可以方便加深大家对字符串对象内存的理解
2019-07-28
共1条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程