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。 我想知道为什么。谢谢大家。
答案 0 :(得分:9)
在这两种情况下,StringBuilder.toString()
都会创建一个新字符串。
在第一种情况下,String.intern()
发现实习池中没有字符串“apple”,因此将提供的字符串添加到池中并返回相同的引用 - 这就是它打印true
的原因
在第二种情况下,String.intern()
发现实习池中已经存在字符串“orange”,因此返回对该字符串的引用 - 这是对b
的不同引用,因此它会打印{ {1}}。
请注意,如果您在此代码开头之前有一行:
false
然后你也会从第一次比较中看到System.out.println("apple");
,出于同样的原因。