2014-01-08 64 views
2

我有什麼,獲得在Java字符串錯誤的輸出,並簽署==

假設我創建像下面兩個Object,

String s1 = "abc"; 
String s2 = s1; 

System.out.println("== comparison "+ s1==s2); 

我期待輸出

==比較true

但我得到

問題是什麼?

我沒有得到我的期望輸出。

問題 爲什麼它不符合預期的輸出。

請回復並解釋它爲什麼會這樣。

在此先感謝 tofek汗

+6

執行'System.out.println(「==比較」+(s1 == s2));'。你將s1與'「==比較」'連接起來。 –

+0

這是java中的一個基本理解,試圖理解'.equal()'和'=='之間的區別 – Rugal

+1

這不是愚蠢的(無論如何) –

回答

10

正是因爲operator precedence

+運算符的優先級高於==

因此,您比較了"== comparison " + s1s2的拼接。由於字符串不可變,因此創建包含"== comparison abc"的新字符串實例,並且此實例永遠不會與s2相同,因爲s2仍引用​​。

使用這個代替

"== comparison " + (s1 == s2) 
+2

經驗法則:如果有疑問,請添加一些額外的括號:-) –

0

您的代碼

System.out.println("== comparison "+ s1==s2); 

其實就是做

System.out.println(("== comparison "+ s1)==s2); 

嘗試

System.out.println("== comparison "+ (s1==s2)); 
0

因爲它打印( 「==比較」 + S1)== S2,這顯然是錯誤的

這是你真正需要什麼

System.out.println("== comparison " + (s1 == s2)); 
+0

感謝你們所有人,因爲給予我的人造好材料。 – user3172496

0
System.out.println("== comparison "+ s1==s2); 

這應改爲

System.out.println("== comparison "+ (s1==s2)); 

爲了預先準備文本輸出的比較結果。也習慣於將字符串與.equals()方法進行比較,因爲您可能想要比較這些值,而不是檢查引用是否相等。請參閱How do I compare strings in Java?