String x = "Hello!";
String y = "Hello!";
System.out.println( x == y );
为什么它仍然出现true
,它们是不是指堆内存中的不同位置?
答案 0 :(得分:2)
JVM将字符串文字存储在池中以供重用。更多信息:Reusability of Strings in java?
答案 1 :(得分:2)
JLS 3.10.5(以及15.28,3.10.5参考文献)中包含了这一点:
字符串文字是对类
String
(§4.3.1,§4.3.3)的实例的引用。此外,字符串文字始终引用类
String
的相同实例。这是因为字符串文字 - 或者更常见的是作为常量表达式(§15.28)的值的字符串 - 被“实现”以便使用方法String.intern
共享唯一实例。
答案 2 :(得分:2)
否。它们不是指不同的位置。由于它是一个String文字,它不会为y
创建一个新对象,而是引用已经为字符串池中的x
创建的同一个对象。