2015-07-10 30 views
3
String s="abc"; 
String s1=s; 
s=s+"d"; 
System.out.println(s==s1 +" "+ s.equals(s1)); 
System.out.println(s.equals(s1)); 

上面的代码是用java编写的。 我认为上述程序的输出可能是Java字符串:程序的输出不如预期

false false 
false 

但实际产量是

false 
false 

谁能解释为什么是这样的输出,为什么没有前一个。

在此先感谢。

+1

是否包含Jon Skeet?我怀疑它的确如此。 –

回答

3
System.out.println(s==s1 +" "+ s.equals(s1)); 

等同于:

System.out.println(s==(s1 +" "+ s.equals(s1))); 

,如果你使用:

System.out.println((s==s1) + " " + s.equals(s1)); 

您将获得:

false false 
2

让我们分析发生了什么这里:

System.out.println(s==s1 +" "+ s.equals(s1)); 

你有一个布尔+字符串+布尔值。但请记住,运营商==+获得了不同的优先级(请参阅http://bmanolov.free.fr/javaoperators.php)。

正如你所看到的+操作符具有更高的优先级,因此首先执行。 这将导致以下:

System.out.println(s == (s1 +" "+ s.equals(s1))); 

正如你所看到的字符串s1将被添加到" ",其余false布尔。

所以,你有

System.out.println(s == "someString"); 

这是假的,所以你会得到"false"作为输出。