Java中的条件评估过程

时间:2013-07-29 12:20:41

标签: java if-statement compiler-construction jvm evaluation

假设我有以下情况:

if ( myList == null || myList.isEmpty() || xomeX == someY )

评估这些条件的顺序是什么?左或右,从右到左或随机每个时间?

如果第一个通过,那么其他人会被忽略?

6 个答案:

答案 0 :(得分:20)

除了赋值运算符=之外,它应该始终是从左到右。您正在使用短路OR运算符,因此如果第一个条件为true,则不会对其余条件进行评估。

JLS 15.24

  

条件或运算符在语法上是左关联的(它从左到右分组)。

     

在运行时,首先计算左侧操作数表达式;如果结果具有布尔类型,则进行拆箱转换(§5.1.8)。

     

如果结果值为true,则条件或表达式的值为true,并且不评估右侧操作数表达式。

答案 1 :(得分:7)

来自JLS

  

在运行时,首先计算左侧操作数表达式[...]如果结果值为true,则条件表达式或表达式的值为true,并且不评估右侧操作数表达式。 / p>

答案 2 :(得分:5)

if ( myList == null || myList.isEmpty() || xomeX == someY )

是评价从左到右!

如果第一个条件为真,则不评估下一个条件。这个概念称为短路评估。您可以阅读有关此here的更多信息。之前发布的类似问题是Java logical operator short-circuiting

答案 3 :(得分:2)

1)从左到右

2)在这种情况下,如果一个条件为真,则不评估其余条件。因此,如果myList为空,则不会抛出NullPointerException评估myList.isEmpty()(因为它不会对其进行评估)

答案 4 :(得分:1)

每个运营商都有自己的precedenceassociativity

这些链接足以回答您的问题。

答案 5 :(得分:0)

||是短路OR运算符,这意味着从左到右严格评估条件,并且此检查过程在第一个真实结果上停止。