繁体   English   中英

字符串串联:+带有字符串文字的运算符

[英]String concatenation: + operator with String literal

为什么s3==s4返回falses2==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"; 无法在编译时评估,因此不是字符串实习的候选人。 (请注意,如果sfinal那么它将是。)

因此,其引用将与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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM