请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

intern

String s = new String(“a”);
s.intern();
String s2 = “a”;
System.out.println(s == s2);
翔仔哥,在上面段代码中,在JDK8中,String s = new String(“a”);首先“a”被存放到常量池中,然后new了之后,在java堆中创建a对象,调用s.intern(),发现字符串常量池中存在a,就会返回该字符串的引用给s?,不就就没有否则之后的条款了吗

所以如果常量池中先前已创建出该字符串对象,则返回该字符串的引用,这句话到底什么意思,是返回给s吗,那返回了s==s2不就是true了吗?

图片描述

正在回答 回答被采纳积分+3

1回答

翔仔 2019-05-31 00:08:33

同学好,这段程序的执行结果的false,原因是因为String s = new String(“a”); 会在堆和常量池都创建一个a;而当调用intern方法的时候,也就是尝试将堆中"a"对象的引用放入到字符串常量池的时候发现常量池中已经有"a"对象了,此时就啥都不做;而当执行到String s2= "a"的时候,会将常量池中的"a"引用返回(如果字符串常量池先前已创建出该字符串对象)。此时System.out.println(s == s2);  s来源于堆中的a,而s2来源于常量池中的a,因此是不一样的

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信