Java - 字符串中的引用相等

时间:2017-11-20 17:10:51

标签: java string reference equality

我正在为OCA做准备,我对字符串中的引用相等感到困惑。 所以给出案例1:

String s = "Hello";
if("Hello" == s){
    System.out.println("TRUE");//prints TRUE
}else {
     System.out.println("FALSE");
}

但在案例2中:

String s = "";
s += "Hello";
if("Hello" == s){
    System.out.println("TRUE");
}else{
     System.out.println("FALSE"); //prints FALSE
}

我知道字符串是不可变的,但是“==”检查引用相等,在第二种情况下,“s”是一个最初指向空字符串然后指向“Hello”的引用。那么,为什么第二种情况会返回错误? 我错过了什么?

关于: What is the Java string pool and how is "s" different from new String("s")? 在我的问题中,在两种情况下,“s”是字符串文字并在字符串池中找到。上面提到的问题是关于字符串文字和String对象(它分配了内存)。

关于: How do I compare strings in Java? 我的问题是“为什么”,而不是“如何”。

@Mark Rotteveel 是的我理解“”+“Hello”是一个不同于“”的字符串,但是我们正在讨论引用相等,其中“s”是一个首先指向字符串“”的引用,然后相同的引用“s”指向另一个字符串“Hello”。在这两种情况下,在if子句之前,引用“s”指向“Hello”,但if子句的结果是不同的。

感谢您一看!

0 个答案:

没有答案