如何评估这个表达式?

时间:2015-12-16 17:40:22

标签: java boolean-logic

考虑以下表达式:

!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)

1 个答案:

答案 0 :(得分:4)

您正确指出了运算符优先级文档,它源自相同的文档,即第二个选项和第三个选项都不正确。第二次打破了!和&&优先规则,第三个打破了!优先规则。

第一个选项最接近Java的方式,但Java也会短路&& amp;和||运算符(仅评估可以给出确定答案的点 - 对于||,首先是true,对于&&),首先是false。因此,在false && true中,它只会评估第一个条件(false)并跳过其余条件。