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
任何人都可以解释为什么这是输出,为什么不是前一个。
提前致谢。
答案 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"
作为输出。