2015-07-10 34 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"作爲輸出。