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

时间:2015-07-10 05:30:39

标签: java string immutability

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

任何人都可以解释为什么这是输出,为什么不是前一个。

提前致谢。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

让我们分析一下这里发生的事情:

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"作为输出。