字符串分配和输出

时间:2013-05-14 14:13:16

标签: java

给出以下代码:

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,但我想这与我得到的第一件事情有关。

很想得到解释。

2 个答案:

答案 0 :(得分:7)

由于String是不可变的,+=运算符会创建一个新实例,并将其分配给str4。因此str4不等于str3

答案 1 :(得分:3)

以下是发生的情况:str3str4开始引用相同的对象。但是,由于Java String是不可变的,因此无法就地修改,这一行

str4 += " World ";

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