为什么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
答案 0 :(得分:3)
s + "123";
不编译时可评估,因此不是字符串实习的候选者。 (请注意,如果s
为final
,那么它就是。)
因此,它的引用与s3
不同,因此输出为false
。
由于字符串拘留和表达式的编译时评估,其他所有人都比较true
。
答案 1 :(得分:0)
当您使用==
运算符检查字符串的相等性时,它会检查内存中字符串的位置是否相同。
在案例2和案例4中,字符串"你好"和" hello123"将在字符串常量池中(由于第1行和第3行)并且将被识别为与这些字符串等效,并且将在内存中为每个字符串使用相同的位置。简单来说,它将创建一个String对象并将其插入到" hello"的两个实例中。和" hello123"。
当你这样做时:
String s4=s+"123";
在运行时,它会为s4
创建一个新的内存位置,因为JLS表示:
在运行时通过串联计算的字符串是新创建的,因此是不同的。
因此,内存位置不同,因此它会将false
作为输出。