Java 字符串:程序的输出不符合预期

Java Strings : The output of the program is not as expected

String s="abc";
String s1=s;
s=s+"d";
System.out.println(s==s1 +" "+ s.equals(s1));
System.out.println(s.equals(s1));

以上代码写在java。 我以为上面程序的输出可能是

false false
false

但实际输出是

false 
false

谁能解释为什么这是输出,为什么不是以前的输出。

提前致谢。

System.out.println(s==s1 +" "+ s.equals(s1));

相当于:

System.out.println(s==(s1 +" "+ s.equals(s1)));

如果您使用过:

System.out.println((s==s1) + " " + s.equals(s1));

您将获得:

false false

让我们分析一下这里发生了什么:

System.out.println(s==s1 +" "+ s.equals(s1));

你有一个布尔值 + 字符串 + 布尔值。但请记住,运算符 ==+ 具有不同的优先级(参见 http://bmanolov.free.fr/javaoperators.php)。

如您所见,+ 运算符具有更高的优先级,因此首先执行。 这会导致以下情况:

System.out.println(s == (s1 +" "+ s.equals(s1)) );

如您所见,字符串 s1 将添加到 " " 和剩余的 false 布尔值。

所以你有

System.out.println(s == "someString");

这是错误的,因此你得到 "false" 作为输出。