Java是否定义了字符串池优化?

时间:2017-01-18 09:27:34

标签: java standards

所有Java完全兼容的实现中a == b总是true吗?

String a = "abc";
String b = "abc";

if (a == b)
  System.out.println("True");

有人问我是否会在求职面试中打印True。我知道ab可以指向与优化相同的"abc",但我不确定此优化是否已标准化,或者它是否是特定的实现行为。< / p>

2 个答案:

答案 0 :(得分:3)

是。它由Java Language Specification #3.10.5保证:

  

此外,字符串文字始终引用类String的同一实例。这是因为字符串文字 - 或者更常见的是作为常量表达式(§15.28)的值的字符串 - 被“实例化”以便使用方法String.intern共享唯一实例。

答案 1 :(得分:3)

在java语言规范JLS section 3.10.5中指定字符串文字的实习

参见:此外,字符串文字总是引用类String的相同实例。这是因为使用String.intern

方法,字符串文字 - 或者更常见的是作为常量表达式的值的字符串(第15.28节) - 被“实例化”以便共享唯一的实例。

所以,是的,你的求职面试的正确答案是肯定的,但你应该跟进,并说始终应该通过.equals()来测试字符串等值。