可能的重复:
如何在 Java 中比较字符串?
为什么第一次比较( s1 == s2 )显示相等,而第二次比较( s1 == s3 )显示不相等......?
public class StringComparison
{
public static void main( String [] args)
{
String s1 = "Arsalan";
String s2 = "Arsalan";
String s3 = new String ("Arsalan");
if ( s1 == s2 )
System.out.println (" S1 and S2 Both are equal...");
else
System.out.println ("S1 and S2 not equal");
if ( s1 == s3 )
System.out.println (" S1 and S3 Both are equal...");
else
System.out.println (" S1 and S3 are not equal");
}
}
这与以下事实有关:您无法将字符串与==
以及编译器优化。
==
在 Java 中,仅比较两侧是否引用同一对象的完全相同的实例。它不比较内容。要比较字符串的实际内容,您需要使用s1.equals(s2)
.
现在原因是s1 == s2
是真的并且s1 == s3
为 false 是因为 JVM 决定优化代码,以便s1
and s2
是同一个对象。 (这称为“字符串池”。)
根据 3.10.5:字符串文字的池化实际上是由标准强制执行的。
此外,字符串文字始终引用类的同一个实例
细绳。这是因为字符串文字 - 或者更一般地说,字符串
这是常量表达式的值(第 15.28 节) - 被“保留”
以便使用 String.intern 方法共享唯一实例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)