[英]How is (true != false != true) different from (false != true != false)?
我最近用Java进行了入学测试,这个问题使我感到困惑。 完整的问题是:
boolean b1 = true;
boolean b2 = false;
if (b2 != b1 != b2)
System.out.println("true");
else
System.out.println("false");
我的第一个问题是(b2!= b1!= b2)的含义,第二个问题,如标题中所述,是(false!= true!= false)如何计算为true,而(true!= false!= true)评估为假(我在Netbeans上进行了测试)。
您有两个布尔比较,其中第一个比较产生的结果与另一个布尔值(最后一个)进行比较。
并且相等运算符在语法上是左关联的(它们的组从左到右)。
要理解,您可以通过两次比较来重写实际比较:
1) false != true != false
== true
为
boolean result = false != true; // ->true
result = true != false; // ->true
result == true;
2) true != false != true
== false
为
boolean result = true != false; // -> true
result = true != true; // -> false
result == false;
或者,您也可以用括号将第一比较括起来,以简化对评估优先级的读取(从左到右):
1) false != true != false
== true
为
<=> (false != true) != false
<=> true != false
<=> true
2) true != false != true
== false
为
<=> (true != false) != true
<=> true != true
<=> false
它将以这种方式评估:
1- false != true != false
= false!=true
= true
所以这个false != true
变成true
,然后方程式变成这样
true
!= false
等于true
所以结果是true
。
现在,对于第二个,您可以评估与
2- true != false != true
true!=false
这是true
现在为true != true
,这是false
因此您得到的结果为false
看看大多数编译器会发生什么,从左到右开始评估表达式。因此,在这种情况下,首先发生的事情就是对其进行评估。
False != True == True //is evaluated first which is true
然后用从第一个表达式得到的真值进行评估
True != False == True //which is also true
所以完整的表达像这样
False != True != False == True// which is True
现在在第二种情况下,表达式就像
True != False != True == False
拳头表达式的输出为True!= False的结果为True,表达式变为True!= True为false
我希望这是有道理的。 这是因为!=的关联性是从左到右,因此从左到右进行评估。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.