5

All.I 有一个这样的 java 代码片段:

 String a = new StringBuilder("app").append("le").toString();
 System.out.println(a.intern() == a);
 String b = new StringBuilder("orange").toString();
 System.out.println(b.intern() == b);

这个java代码将输出true,false。我想知道为什么。谢谢大家。

4

1 回答 1

11

在这两种情况下,StringBuilder.toString()都会创建一个新字符串。

在第一种情况下,String.intern()发现实习生池中没有字符串“apple”,因此将提供的字符串添加到池中并返回相同的引用——这就是它打印的原因true

在第二种情况下,String.intern()发现实习生池中已经有一个字符串“orange”,因此返回对它的引用 - 这是对 的不同引用b,因此它打印false

请注意,如果您在此代码开始之前有一行:

System.out.println("apple");

那么你也会false从第一次比较中看到,出于同样的原因。

于 2016-10-08T07:14:47.047 回答