可能重复:
如何比较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");
}
}
Run Code Online (Sandbox Code Playgroud)
Mys*_*ial 11
这与您无法比较字符串==以及编译器优化这一事实有关.
==在Java中仅比较双方是否引用同一对象的完全相同的实例.它没有比较内容.要比较字符串的实际内容,您需要使用s1.equals(s2).
现在为什么的原因s1 == s2是真实的,s1 == s3是假是因为JVM决定对代码进行优化,以便s1和s2是同一个对象.(它被称为"String Pooling.")
根据3.10.5:字符串文字的汇集实际上是由标准强制执行的.
此外,字符串文字始终引用类String的相同实例.这是因为字符串文字 - 或者更常见的是作为常量表达式(第15.28节)的值的字符串 - 被"实例化"以便使用String.intern方法共享唯一实例.