Java中的字符串比较......?

Ars*_*lan 1 java

可能重复:
如何比较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决定对代码进行优化,以便s1s2是同一个对象.(它被称为"String Pooling.")


根据3.10.5:字符串文字的汇集实际上是由标准强制执行的.

此外,字符串文字始终引用类String的相同实例.这是因为字符串文字 - 或者更常见的是作为常量表达式(第15.28节)的值的字符串 - 被"实例化"以便使用String.intern方法共享唯一实例.