所有Java完全兼容的实现中a == b
总是true
吗?
String a = "abc";
String b = "abc";
if (a == b)
System.out.println("True");
有人问我是否会在求职面试中打印True
。我知道a
和b
可以指向与优化相同的"abc"
,但我不确定此优化是否已标准化,或者它是否是特定的实现行为。< / p>
答案 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()
来测试字符串等值。