2017-04-09 44 views
0

我最近開始學習Java,我在鬼混,我對此感到困惑。關於Java中的字符串的困惑

String s1 = "Happy"; 
String s2 = "Happy"; 
String s3 = new String ("Happy"); 

boolean sameString; 
sameString = (s1 == s2); 
System.out.println("s1 == s2 is " + sameString); 
// This returns True. 

sameString = (s1 == s3); 
System.out.println("s1 == s3 is " + sameString); 
// This returns False. 

有人可以解釋爲什麼這對我是這樣嗎?謝謝!

回答

1

==測試參考平等(無論它們是同一個對象)。

String s1="Happy"; 
String s2="Happy"; 
if(s1==s2) ===> true 

(S1 == S2)===>真

    String Pool 
s1 -----------------> "Happy" <-----------------s2 

如果(S1 == S3)==​​=>假。

  String Pool 
"Happy" <-------------------- s1 

       Heap 
"Happy" <-------------------- s3 
1

字符串在Java中是不可變的
這意味着,當你改變了字符串java會創建一個新的存儲位置
當你寫字符串S1 =「快樂」你給了Java的控制,使
字符串你 如果java發現任何具有相同值的字符串假設您寫入s2 =「Happy」
它將使s1和s2指向同一內存位置 因此s1 == s2將返回true 但是當您寫入String s3 = new String(「Happy」);你犯了一個新的存儲位置


當你寫S3 == S2將返回false BEC S2和S3不同存儲位置