Java中的条件评估过程

Kev*_*ave 14 java compiler-construction evaluation jvm if-statement

可以说我有以下条件:

if ( myList == null || myList.isEmpty() || xomeX == someY )
Run Code Online (Sandbox Code Playgroud)

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

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

NIN*_*OOP 21

除了赋值运算符之外,它应始终从左到右=.您正在使用短路OR操作器,因此如果第一个条件是true,则不会评估其余部分.

JLS 15.24:

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

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

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

  • 首先对x进行评估,然后对y进行评估,然后对z进行评估,然后对1进行评估,然后对valueOfZ +1进行评估,然后对y = resultOfZPlus1进行评估,然后对x = resultOfAssigningY进行评估。 (2认同)

Vin*_*ele 7

来自JLS

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


Ani*_*kur 5

if ( myList == null || myList.isEmpty() || xomeX == someY )
Run Code Online (Sandbox Code Playgroud)

是的,评估是从左到右!

如果第一个条件为真,则不评估下一个条件.这个概念称为短路评估.你可以在这里阅读更多相关内容.之前发布的类似SO问题是Java逻辑运算符短路