62,626
社区成员
发帖
与我相关
我的任务
分享
new String("a") + new String("b");
底层实际上是使用StringBuilder.append()来实现“+”操作的。
最终返回给变量的是一个新的String对象(就是新new出来的String)。
============================================
为什么a.intern() == a是false ,而str.intern() == str是true
a的引用(引用1)实际上是new String("abc")对象的引用,而非常量池中"abc"的引用(引用2),这两个引用地址是不一样的,所以会有a.intern() == a是false;
String str = new String("a") + new String("b")中,new String("a") + new String("b")返回的是新对象(StringBuilder.toString()返回的对象,引用3),在str.intern()的时候,会去常量池检查是否存在,如果不存在,则将引用3存到常量池并返回。即str.intern()的引用和str的引用为同一个,所以str.intern() == str是true