Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么以下两种代码的输出不同?_Java_String - Fatal编程技术网

Java 为什么以下两种代码的输出不同?

Java 为什么以下两种代码的输出不同?,java,string,Java,String,下面的程序输出错误 String s1="a"; String s2="b"; String s3=s1+s2; String s4="ab"; if(s3==s4) { System.out.println("true"); } else { System.out.println("false"); } 这个代码输出true String s3="a"+"b"; String

下面的程序输出错误

    String s1="a";
    String s2="b";
    String s3=s1+s2;
    String s4="ab";

    if(s3==s4)
    {
        System.out.println("true");
    }
    else
    {
        System.out.println("false");
    }
这个代码输出true

String s3="a"+"b";
  String s4="ab";

  if(s3==s4)
  {
      System.out.println("true");
  }
  else
  {
      System.out.println("false");
  }
第一种情况下的输出不应该是真的吗?与创建字符串s4=ab时一样,字符串常量池中已经有一个值为ab的对象。

在Java中,您希望使用.equals而不是==来比较字符串。尝试以下方法

String s1="a";
String s2="b";
String s3=s1+s2;
String s4="ab";

if(s3.equals(s4))
{
    System.out.println("true");
}
else
{
    System.out.println("false");
}

为什么人们如此痴迷于字符串常量池以及编译器如何选择实现字符串连接?你需要知道的唯一一件事是永远不要将字符串与==进行比较。另请参见@Thilo我在一次采访中被问到这个问题,所以我问了@Lutz重定向的问题并没有回答实际的问题如果我在一次采访中被问到这个问题,我的答案是一样的:你唯一需要知道的是永远不要将字符串与==进行比较。如果他们面试的是业务应用程序开发人员,而不是编译器编写人员,那么他们问的问题就错了。我知道,当我们要比较字符串值时,使用equals;当我们要比较对象时,使用==,但我的问题不同。