Java 为什么不应该';t我对对象使用相等运算符

Java 为什么不应该';t我对对象使用相等运算符,java,Java,我有一本关于Java的书,它告诉我,如果我对诸如字符串之类的对象使用关系运算符,结果会是错误的。即使两个字符串具有相同的文字值。我对此进行了测试,但打印出了正确的结果。有人能解释一下为什么会这样吗 String y = "Not null"; String x = "Not null"; if(x == y) System.out.println("True"); 两个字符串都位于字符串池中,因此x和y引用相同的对象。如果执行此操作,表

我有一本关于Java的书,它告诉我,如果我对诸如字符串之类的对象使用关系运算符,结果会是错误的。即使两个字符串具有相同的文字值。我对此进行了测试,但打印出了正确的结果。有人能解释一下为什么会这样吗

String y = "Not null";
String x = "Not null";

            if(x == y)
                System.out.println("True");

两个
字符串
都位于字符串池中,因此
x
y
引用相同的对象。如果执行此操作,表达式的计算结果将不会为
true

String y = "Not null";
String x = new String("Not null");

由于
字符串
是不可变的,许多方法通常返回新的
字符串
对象
。这就是为什么建议使用
.equals
方法来比较内容。

字符串被存储在字符串池中,它将返回已经存储在字符串池中的字符串对象的引用(因为它们是相等的)。这就是为什么在您的情况下,它的计算结果为“true”。

您是否尝试过搜索字符串池,这一点在这里已经得到了多次回答。