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

use*_*271 3 java string stringbuilder string-interning

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);
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 9

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

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

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

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

System.out.println("apple");
Run Code Online (Sandbox Code Playgroud)

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