(true!= false!= true)与(false!= true!= false)不同?

时间:2018-04-07 14:03:26

标签: java boolean

我最近用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)评估为false(我在Netbeans上测试过)。

3 个答案:

答案 0 :(得分:6)

您有两个布尔比较,其中第一个比较产生的结果与另一个布尔值(最后一个)进行比较。
并且等于运算符在语法上是左关联的(它们从左到右分组)。

要了解您可以通过两次比较来重写实际比较:

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 :(得分:0)

它将以这种方式评估:

1 - false != true != false = false!=true = true

因此false != true成为true,然后等式变为这样

true!= false等于true

所以结果是true

现在,对于第二个,您可以采用与

相同的方式进行评估

2- true != false != true

true!=falsetrue

现在为true != true false,因此您的结果为false

答案 2 :(得分:0)

看看大多数编译器从左到右开始评估表达式会发生什么 所以在这种情况下,首先发生的是评估这一点。

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,这是假的

我希望这是有道理的。这是因为!=的关联性是从左到右,所以它从左到右进行评估。