2017-04-09 64 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不同存储位置