仅保证字符串 文字 和常量表达式被池化。由于
str1 +str2不是文字,因此由JVM决定是否保留结果。您可以通过
intern()已发现的电话强制它。
这在Java语言规范的第3.10.5节中定义:
字符串文字是对类实例的引用
String(第4.3.1节,第4.3.3节)。而且,字符串文字总是引用class的相同实例
String。这是因为使用方法将字符串文字(或更广泛地说,是作为常量表达式的值的字符串(第15.28节))“插入”以便共享唯一的实例String.intern。
您的第二个示例,
"str" + "ing"是一个常量表达式,因此可以确保将其内联。
另请参阅JavaDoc
String.intern。
这是试图解释发生了什么。编写良好的代码应该永远不要依赖于此,而应始终使用该
equals方法。任何合理的JRE都会有类似的支票
if (this == other) return true;
非常接近
String.equals性能明智的最高标准,这无关紧要。



