逻辑表达式中的动作序列

时间:2018-12-27 10:53:38

标签: java logical-operators

我想问一下这个逻辑表达式的正确顺序“读取”:

(true && false | true) 

由于第一个表达式-true && false ,我认为它返回的是false 但是可能我做错了,应该以另一种方式“阅读”。 您能解释一下正确的阅读方式吗?

2 个答案:

答案 0 :(得分:1)

检查下表Operators Precedence

|(按位或)比&&(逻辑与)具有更高的优先级,因此false | true首先被求值。

也就是说,评估顺序在您的示例中无关紧要。 (true && false) | truetrue && (false | true)均返回true。在第一种情况下,它是false | true),即true。在第二种情况下,它是true && true,它也是true

现在,这是一个运算符优先级有所不同的示例:

System.out.println (false && true | true);
System.out.println (false && true || true);

|的优先级高于&&,但是&&的优先级高于||

因此,这些表达式的计算方式为:

System.out.println (false && (true | true));
System.out.println ((false && true) || true);

因此,第一个返回false,第二个返回true

答案 1 :(得分:1)

通过保持在通知中的要点以下:

除赋值运算符外,所有二进制运算符均从左向右求值;赋值运算符从右到左进行评估。

这将从左到右执行。在第二点之后,需要考虑的是操作员优先

|是按位运算符,&&是逻辑运算。按位运算符比逻辑运算符具有更高的优先级。

在您的情况下,第一个评估为假|正确,正确。

然后它将评估上面为true的&&结果。

所以给定的陈述将是正确的。