[英]String concatenation: + operator with String literal
为什么s3==s4
返回false
而s2==s3
返回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
s + "123";
无法在编译时评估,因此不是字符串实习的候选人。 (请注意,如果s
是final
那么它将是。)
因此,其引用将与s3
,因此输出为false
。
由于字符串内嵌和表达式的编译时可评估性,其他所有比较都为true
。
当您使用==
运算符检查字符串的相等性时,它将检查字符串在内存中的位置是否相同。
在情况2和4中,字符串“ hello”和“ hello123”将已经在字符串常量池中 (由于第1行和第3行),将被识别为等同于那些字符串,并且将在内存中使用相同的位置每。 简单来说,它将创建一个String对象,并将其插入“ hello”和“ hello123”的两个实例中。
当您这样做时:
String s4=s+"123";
在运行时,它将为s4
创建一个新的内存位置,因为JLS表示:
在运行时通过串联计算的字符串是新创建的,因此是不同的。
因此,存储位置不同,因此输出为false
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.