Java中的条件评估过程
可以说我有以下条件:
if ( myList == null || myList.isEmpty() || xomeX == someY )
评估这些条件的顺序是什么? 左右,右到左或每次随机?
如果第一个通过,那么其他人会被忽略?
除了赋值运算符=
之外,它应始终从左到右 。 您正在使用短路OR
运算符,因此如果第一个条件为true
,则不会评估其余条件。
JLS 15.24 :
条件或运算符在语法上是左关联的(它从左到右分组)。
在运行时,首先计算左侧操作数表达式; 如果结果具有布尔类型,则进行拆箱转换(第5.1.8节)。
如果结果值为true,则条件或表达式的值为true,并且不评估右侧操作数表达式。
来自JLS
在运行时,首先计算左侧操作数表达式[…]如果结果值为true,则条件或表达式的值为true,并且不评估右侧操作数表达式。
if ( myList == null || myList.isEmpty() || xomeX == someY )
是的,评估是从左到右!
和
如果第一个条件为真,则不评估下一个条件。 这个概念称为短路评估。 你可以在这里阅读更多内容。 之前发布的类似SO问题是Java逻辑运算符短路
1)从左到右
2)在这种情况下,如果一个条件为真,则不评估其余条件。 所以如果myList
为null,它将不会抛出一个NullPointerException
评估myList.isEmpty()
(因为它不会对它进行求值)
每个运营商都有自己的优先级和关联性 。
这些链接足以回答您的问题。
|| 是短路OR运算符,这意味着从左到右严格评估条件,并且该检查过程在第一个真实结果上停止。