java.lang.String.intern() API doc说
否则,将此String对象添加到池中,并返回对此String对象的引用。
它告诉我,如果String对象不在池中,它会将相同的String对象添加到池中。
所以在下面的代码中,为什么输出不是true
?
String s1 = new String("abc");
String s2 = s1.intern();
System.out.println(s1 == s2);
答案 0 :(得分:7)
所有字符串文字都会自动实习。
因此,s1.intern()
会从"abc"
返回已经实例化的实例,而不是s1
。
要创建一个没有实习的字符串,您可以编写new String("a") + "bc"
。
答案 1 :(得分:3)
因为"abc"
已经存在于字符串池中:当您引用字符串常量String
以将其复制到此新"abc"
时,它已添加到String
池中}。