我最近开始学习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.
有人可以解释为什么对我这样吗?谢谢!
答案 0 :(得分:1)
java中的字符串是不可变的
这意味着当你更改字符串时,java会创建一个新的内存位置
当你写String s1 =“Happy”时,你给java控件为你做字符串
如果java找到任何具有相同值的字符串,则假设你写了s2 =“Happy”
它会使s1和s2指向同一个内存位置
所以s1 == s2将返回true
但是当你写String s3 = new String(“Happy”);你创建一个新的记忆位置
当你写s3 == s2时,它将返回false,因为s2和s3位于不同的内存位置
答案 1 :(得分:1)
==
测试引用相等性(它们是否是同一个对象)。
String s1="Happy";
String s2="Happy";
if(s1==s2) ===> true
(s1 == s2)===>真强>
String Pool
s1 -----------------> "Happy" <-----------------s2
if(s1 == s3)===&gt;假强>
String Pool
"Happy" <-------------------- s1
Heap
"Happy" <-------------------- s3