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.
022021-03-17
相似问题