intern方法

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

mahsiaoko

2021-03-13

图片描述
图片描述
在jdk6中,上面说调用intern方法时,如果字符串常量池先前已经创建该字符串对象,则返回池中该字符串对象的引用,这句话感觉和下面的运行结果有出入。
String s=new String(“a”);
s.intern()
此时按照上面说的,常量池中已经存在了"a",那s.intern()的时候,不该返回池中对象的引用吗?而s2=“a"也是指向池中的对象?我按照上面的说法进行分析,总感觉s==s2应该是true才对,不知道是不是我的理解的问题,希望老师解释一下。

写回答

1回答

翔仔

2021-03-13

同学好,

String s = new String("a");
这句话实际创建了两个对象,一个是常量池中的字符串常量“a”,另一个是堆上的String对象,s是它的引用。

s.intern();

这一句在池中寻找“a”,可以找到。所以池中没有发生改变。

String s2 = "a";

在池中寻找“a”,可以找到,所以s2指向池中“a”

所以运行之后s指向堆中对象,s2指向池中对象,当然不是指向同一个对象,结果为false.


0
2
翔仔
回复
mahsiaoko
同学可以直接试一下,这样印象更深刻哈,是true
2021-03-17
共2条回复

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

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

8441 学习 · 1872 问题

查看课程