String x2 = new String("c") + new String("d");
String x1 = "cd";
x2.intern();
//问
问4: System.out.println(x1 == x2);
问题1:
分析:
String s3 = "a" + “b";
"a" 、“b"都是常量,在编译器已优化处理s3="ab", 放入字符串池。
而s4 = s1 + s2;
内部操作:new Stringbuilder().apend("a").apend("b").toString();
Stringbuilder的toString()方法返回String对象,存放在堆内存。
所以, s3 != s4
问题2:
分析:"ab"已存在在字符串池,s5指向字符串池中的地址。
所以 s3 == s5
问题3:
s4是指向堆内存的地址,
s4.intern():主动将串池还没有的字符串对象放入串池。
如果串池已有相同字符串,则并不会放入;
如果没有则放入,返回串池中的对象。
这里s3已将“ab"放入串池,s6不会再放相同字符串到串池,s6仍指向堆内存的地址。
所以,s3 != s6
问题4:
同问题3;
评论区