对Java中的字符串感到困惑

时间:2017-04-09 07:23:48

标签: java string boolean

我最近开始学习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.

有人可以解释为什么对我这样吗?谢谢!

2 个答案:

答案 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