假设我有以下条件:
if ( myList == null || myList.isEmpty() || xomeX == someY )
这些条件的评估顺序是什么?每次向左还是向右,从右向左还是随机?
如果第一个通过,那么其他的就被忽略了吗?
假设我有以下条件:
if ( myList == null || myList.isEmpty() || xomeX == someY )
这些条件的评估顺序是什么?每次向左还是向右,从右向左还是随机?
如果第一个通过,那么其他的就被忽略了吗?
除了赋值运算符之外,它应该始终从左到右=
。您正在使用 short circuit OR
operator ,因此如果第一个条件是true
,则不会评估其余条件。
条件或运算符在语法上是左结合的(它从左到右分组)。
在运行时,首先计算左边的操作数表达式;如果结果具有布尔类型,则将进行拆箱转换(第 5.1.8 节)。
如果结果值为真,则条件或表达式的值为真,并且不计算右侧操作数表达式。
if ( myList == null || myList.isEmpty() || xomeX == someY )
是的,评价是从左到右!
和
如果第一个条件为真,则不评估下一个条件。这个概念称为短路评估。您可以在此处阅读更多信息。之前发布的类似 SO 问题是Java 逻辑运算符短路
来自JLS
在运行时,首先计算左侧操作数表达式 [...] 如果结果值为真,则条件或表达式的值为真,并且不计算右侧操作数表达式。
1) 从左到右
2) 在这种情况下,如果一个条件为真,则不会评估其余条件。所以如果myList
为空,它不会引发NullPointerException
评估myList.isEmpty()
(因为它不会评估它)
|| 是短路或运算符,这意味着从左到右严格评估条件,并且此检查过程在第一个真实结果时停止。