2016-03-31 216 views
-1

爲什麼s3==s4返回falses2==s3返回true在行號。分別爲8和7。字符串連接:帶字符串文字的+運算符

1. String s="hello";` 
2. String s1="he"+"llo"; 
3. String s2="hello"+123; 
4. String s3="hello123"; 
5. String s4=ss+"123"; 

7. System.out.println(s==s1);//prints true 
8. System.out.println(s2==s3);//prints true 
9. System.out.println(s3==s4);//prints false 
+2

什麼是'ss'?大概你的意思是'''? – Bathsheba

+0

你在你的代碼中有一個錯字,你應該使用第5行中的一個s而不是兩個ss: String s4 = s +「123」; 不是: String s4 = ss +「123」; – Abdelhak

+0

java中的字符串比較應該使用字符串類的equals()方法完成。 – Patrick

回答

3

s + "123";編譯時評估等都不是字符串拘禁的候選人。 (注意,如果sfinal那麼這將是)

因此其參考不會一樣s3,所以輸出是false

其他所有人都比較true由於字符串internment和編譯時評估的表達式。

+0

我知道這有點淘氣回答這個問題,因爲那裏必須有足夠的重複,但@downvoters,告訴我,如果在答案中有什麼不妥之處;-) – Bathsheba

0

當您使用==運算符檢查字符串是否相等時,它會檢查內存中字符串的位置是否相同。

在情況2和4中,字符串「你好」和「hello123」將已經在字符串常量池的(由於線1和3),並且將被識別爲等同於字符串,並且將使用每個內存中的相同位置。簡而言之,它將創建一個String對象並將其插入到「hello」和「hello123」的兩個實例中。

當你這樣做:

String s4=s+"123"; 

在運行時,它創造了s4新的存儲位置,因爲在JLS說:在運行時通過串聯計算

字符串是新創建,因此不同。

因此,內存位置是不同的,因此它給出false作爲輸出。