2

给定以下代码:

String str1 = new String("Hello");
String str2 = str1;
String str3 = new String(str1);
String str4 = str3;
str4 += " World ";
if (str3==str4)
     System.out.println(“one”);
if (str3.equals(str4))
     System.out.println(“two”);
if (str1==str2)
     System.out.println(“three”); 
if (str3.equals(str2))
     System.out.println(“four”);

输出为:三和四

我不明白..我们只是做了 str3 == str4 。他们怎么能不引用同一个对象..?str3 == str4 似乎是错误的,我不明白为什么。此外, str3.equals(str4) 也返回 false 但我想这与我没有得到的第一件事有关。

很想得到一个解释。

4

2 回答 2

7

因为 aString是不可变的,所以+=运算符创建一个新实例并将其分配给str4。因此str4不相等str3

于 2013-05-14T14:20:27.970 回答
3

这是发生的事情:str3str4开始引用同一个对象。然而,由于 JavaString是不可变的,因此不能就地修改,这一行

str4 += " World ";

导致分配str4对全新对象的引用。这就是后续比较str3==str4失败的原因。

于 2013-05-14T14:21:07.160 回答