2014-09-13 120 views
3

這是關於字符串的一個非常基本的問題。有關字符串的基本查詢

String str1 = "abc"; 
String str2 = "abc"; 

System.out.println("out put " + str1 == str2); 

當我執行程序時,我感到震驚。我得到了false

據我,字符串文字字符串引用之間,如果另一個字符串要指向同一個字符串字面共享。 JVM將首先在String池中檢查它,如果它不存在,那麼它將創建一個並給出引用,否則它將在多個String引用之間共享,就像在這種情況下(根據我)。

所以,如果我用我的理論去那麼它應該已經返回true同時作爲字符串參考點,以相同的字符串文字。

+3

@broncoAbierto這不是同一個問題。 OP似乎很好地理解了引用比較,並且打算測試常量字符串interning。這個問題是運營商的優先。 – kiheru 2014-09-13 09:24:40

+0

@kiheru你說得對。我收回我的評論。 – broncoAbierto 2014-09-13 09:28:36

回答

4

你需要做到以下幾點正確檢查: -

System.out.println("out put " + (str1 == str2)); 

預期這會給你正確的。

你的語句做「出來放」 + str1和隨後試圖與STR2

0

等同起來你說得對字符串的行爲。但是,您忘記了operator precedence.第一個加法被執行,後來相等。

所以,你的情況,首先"out put " + str1被執行,這給"out put abc"。稍後將其與str2進行比較,其給出false

你的意思"out put " + (str1 == str2),這的確給true