假设我有以下情况:
if ( myList == null || myList.isEmpty() || xomeX == someY )
评估这些条件的顺序是什么?左或右,从右到左或随机每个时间?
如果第一个通过,那么其他人会被忽略?
答案 0 :(得分:20)
除了赋值运算符=
之外,它应该始终是从左到右。您正在使用短路OR
运算符,因此如果第一个条件为true
,则不会对其余条件进行评估。
条件或运算符在语法上是左关联的(它从左到右分组)。
在运行时,首先计算左侧操作数表达式;如果结果具有布尔类型,则进行拆箱转换(§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)
每个运营商都有自己的precedence和associativity。
这些链接足以回答您的问题。
答案 5 :(得分:0)
||是短路OR运算符,这意味着从左到右严格评估条件,并且此检查过程在第一个真实结果上停止。