public static void main(String[] args) {
String a = new StringBuilder("Jav").toString();
a.intern();
String c = "Jav";
System.out.println(a == c); //false
}
Run Code Online (Sandbox Code Playgroud)
public static void main(String[] args) {
String a = new StringBuilder("Ja").append("v").toString();
a.intern();
String c = "Jav";
System.out.println(a == c); //true
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么第一个会打印出 false,但第二个会打印出 true。我认为这些应该打印出true,因为调用intern方法后,a的引用将被写入字符串池,而c将指向a的引用。有人可以解释其中的区别吗?谢谢!
我的JDK版本:OpenJDK 17.0.7
顺便说一句,我在使用 StringBuffer 时也得到了相同的结果。