如何评估这个表达式?
How would this expression be evaluated?
考虑以下表达式:
!true || false && true || false
计算结果为 false,但我想知道 java 如何完成这些操作。我知道 order in terms of precedence,其中 ! (not)
具有最高优先级,其次是 && (and)
,然后是 || (or)
。
我可以通过几种方式查看它的评估情况:
(!true) || (false && true) || false
!(true || false) && (true || false)
!(true || (false && true) || false)
您正确地指出了运算符优先级文档,并且它源自相同的文档,即第二个和第三个选项都不正确。二破双双!和 && 优先规则,第三个打破了!优先规则。
第一个选项最接近Java的方式,但是Java也会短路&&和||运算符(仅评估到可以给出明确答案的程度 - 即第一个 true
代表 || 和第一个 false
代表 &&)。所以在 false && true
中它只会评估第一个条件 (false
) 并跳过其余的。
考虑以下表达式:
!true || false && true || false
计算结果为 false,但我想知道 java 如何完成这些操作。我知道 order in terms of precedence,其中 ! (not)
具有最高优先级,其次是 && (and)
,然后是 || (or)
。
我可以通过几种方式查看它的评估情况:
(!true) || (false && true) || false
!(true || false) && (true || false)
!(true || (false && true) || false)
您正确地指出了运算符优先级文档,并且它源自相同的文档,即第二个和第三个选项都不正确。二破双双!和 && 优先规则,第三个打破了!优先规则。
第一个选项最接近Java的方式,但是Java也会短路&&和||运算符(仅评估到可以给出明确答案的程度 - 即第一个 true
代表 || 和第一个 false
代表 &&)。所以在 false && true
中它只会评估第一个条件 (false
) 并跳过其余的。