字符串连接:+运算符与字符串文字

时间:2016-03-31 12:28:30

标签: java

为什么s3==s4会返回false,而s2==s3会在第0行返回true。分别为8和7。

 1. String s="hello";`
 2. String s1="he"+"llo";
 3. String s2="hello"+123;
 4. String s3="hello123";
 5. String s4=ss+"123";

 7. System.out.println(s==s1);//prints true
 8. System.out.println(s2==s3);//prints true
 9. System.out.println(s3==s4);//prints  false

2 个答案:

答案 0 :(得分:3)

s + "123"; 编译时可评估,因此不是字符串实习的候选者。 (请注意,如果sfinal,那么它就是。)

因此,它的引用与s3不同,因此输出为false

由于字符串拘留和表达式的编译时评估,其他所有人都比较true

答案 1 :(得分:0)

当您使用==运算符检查字符串的相等性时,它会检查内存中字符串的位置是否相同。

在案例2和案例4中,字符串"你好"和" hello123"将在字符串常量池中(由于第1行和第3行)并且将被识别为与这些字符串等效,并且将在内存中为每个字符串使用相同的位置。简单来说,它将创建一个String对象并将其插入到" hello"的两个实例中。和" hello123"。

当你这样做时:

String s4=s+"123";

在运行时,它会为s4创建一个新的内存位置,因为JLS表示:

  

在运行时通过串联计算的字符串是新创建的,因此是不同的。

因此,内存位置不同,因此它会将false作为输出。