为什么这是真的,不应该是错误的,因为它来自不同的地方

时间:2015-10-22 18:27:31

标签: java

String x = "Hello!";

String y = "Hello!";

System.out.println( x == y );

为什么它仍然出现true,它们是不是指堆内存中的不同位置?

3 个答案:

答案 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创建的同一个对象。