我有以下代碼:爲什麼DOES ==有時適用於Java中的字符串?
Circle c1 = new Circle();
Circle c2 = new Circle();
System.out.println(c1 == c2);
,輸出False
,符合市場預期。這是因爲c1
和c2
是引用類型,「==」檢查它們是否指向相同類型(它們不這樣做)。
不過,我最近嘗試這樣的:
String a = "hello";
String b = "hello";
System.out.println(a == b);
由於某種原因輸出True
。爲什麼是這樣?字符串是參考類型,a
和b
指的是不同的存儲位置。我總是被教導,你需要使用.equals()
這個工作,這不是!
UPDATE 這豈不是重複的! 我知道正確的方式來比較字符串使用.eqauls()
更新2 這個問題可能有一個答案:How do I compare strings in Java?,但問題也沒有問什麼,我問,答案就在更多的去詳細比需要。
因此,使用相同的問題進行搜索(在Google或其他平臺上)意味着用戶不會被髮送到該問題,或者可能由於問題的標題而將其完全消除。因此,爲了其他用戶的利益而保持這一點可能是一個好主意!
我同意OP-這不是這些問題中的任何一個的重複。這是要求_why_引用相等不返回兩個完全相同的字符串文字。 – davmac
你會在這裏找到答案http://stackoverflow.com/questions/2486191/what-is-the-java-string-pool-and-how-is-s-different-from-new-strings。 – yorlin
是的,這個問題可能在那裏有答案,但是那裏的問題並沒有這麼問。因此,用同樣的問題搜索,不會發送到那裏。因此,爲了其他用戶的利益,這可能是一個想法。 –