Java中String对象在堆和常量池中的情况及比较

4).特别说明的是这种情况

String s = new String(“11”) + new String(“11”);
s.intern();
String s1 = “1111”;
System.out.println(s == s1);

此时返回的是true:
Java中String对象在堆和常量池中的情况及比较_第1张图片
当定义s的时候是在堆中建立一个值为“1111”的引用而在常量池中新建的是“11”的常量,在执行intern()方法后在jdk1.7中为了节省内存像s这种定义在常量池中存的是s在堆中的引用地址值为“1111”的常量,所以当s1定义后去常量池中找到“1111”的时候地址是s的引用地址,所以s==s1为true,因为两者的引用地址是相同的。

你可能感兴趣的:(java)