为什么使用append或者不同的StringBuilder的str == str.intern()的结果?

时间:2016-10-08 07:07:08

标签: java string stringbuilder string-interning

All。我有一个像这样的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。 我想知道为什么。谢谢大家。

1 个答案:

答案 0 :(得分:9)

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

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

在第二种情况下,String.intern()发现实习池中已经存在字符串“orange”,因此返回对该字符串的引用 - 这是对b的不同引用,因此它会打印{ {1}}。

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

false

然后你也会从第一次比较中看到System.out.println("apple"); ,出于同样的原因。