2013-05-14 32 views
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,但我想这与我没有得到的第一件事有关。

很想得到解释。

+0

这是一个重复的,请浏览类似问题的网站。 :) – PermGenError 2013-05-14 14:14:27

+3

重复..?怎么来的?我确实在寻找类似的问题。 – Rouki 2013-05-14 14:15:31

+0

这一个..? http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java?那不回答我的问题。 – Rouki 2013-05-14 14:15:53

回答

7

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

+0

谢谢。得到它了。 – Rouki 2013-05-14 14:20:53

3

这里发生了什么:str3str4开始引用同一个对象。然而,由于Java的String是不可改变的,因此不能被就地中分配str4到一个全新的对象的引用改性,这条线

str4 += " World "; 

结果。这就是后续比较str3==str4失败的原因。