Java 使用OR运算符时是否同时运行两个参数?
可能重复:Java 使用OR运算符时是否同时运行两个参数?,java,if-statement,operators,Java,If Statement,Operators,可能重复: 当foo为true时,它是否会进入栏?否,|使用所谓的最小求值,或者称为最小求值,一旦找到求值为true(从左到右)的表达式,它就会停止求值条件 从: 15.24。条件或运算符|| 条件or运算符| |运算符类似于|(§15.22.2),但是 仅当其左操作数的值 操作数为false 和&的操作方式类似: 15.23。条件与运算符&& 条件and运算符&&与&(§15.22.2)类似,但计算 仅当其左侧操作数的值为 对 |和&&都是短路逻辑运算符 当两个表达式由OR(|)连接时,如果
当foo为true时,它是否会进入栏?否,
|
使用所谓的最小求值,或者称为最小求值,一旦找到求值为true
(从左到右)的表达式,它就会停止求值条件
从:
15.24。条件或运算符||
条件or运算符| |运算符类似于|(§15.22.2),但是
仅当其左操作数的值
操作数为false
和&
的操作方式类似:
15.23。条件与运算符&&
条件and运算符&&与&(§15.22.2)类似,但计算
仅当其左侧操作数的值为
对
|
和&&
都是短路逻辑运算符
当两个表达式由OR(|
)连接时,如果第一个表达式为真,则答案将始终为真
| |真假
千真万确
假真假
&&
和|
在知道计算结果后立即停止计算。例如:
if (a == null || a.get() == null)
工作得很好,因为如果a为null,则第二部分不会被计算,并且不会出现NullPointerException
如果希望计算这两个表达式,可以使用无条件的&
或|
:
if (a == null | a.get() == null)
将评估这两个条件,无论第一个条件是否正确
给出您可能希望发生这种情况的示例。如果
foo
为true,则将忽略bar
。这是短路评估。像这样的问题没有什么意义。为什么不呢?@Karolis:因为尝试将向您显示当前运行的Java虚拟机的行为,而不一定是指定的行为。@jarnbjo但如果JVM的行为与Java语言规范中指定的行为不同,您将有一个坏JVM。特别是如果像这样基本的东西不起作用,它就会真的,真的坏了。@Jesper:问题是?如果指定了某些行为,那么它当然会在任何VM中工作,如果VM没有损坏的话。但是,如果您在一个VM上观察到一个行为,您就不能以另一种方式得出结论,并假定要指定的行为在所有其他VM上都是相同的。
if (a == null | a.get() == null)