本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
&& (AND) and || (OR) in Java IF statements
if(foo || bar) {
}
如果foo为true,它甚至会进入bar吗?
如果foo为true,则将忽略bar。 其短路评估。
这样的问题毫无意义。 为什么不尝试?
@Karolis:因为尝试将向您显示当前正在运行的Java VM的行为,而不一定是指定的行为。
@jarnbjo但是,如果JVM的行为与Java语言规范中指定的行为不同,则说明您的JVM损坏了。 尤其是如果这样的基本操作行不通,那就真的很破了。
@Jesper:问题是? 如果指定了某些行为,则该虚拟机当然可以在任何虚拟机中正常工作(如果虚拟机未损坏)。 如果您观察到一个VM上的行为,则无法以另一种方式得出结论并假定要指定的行为与所有其他VM上的行为相同。
不,||使用所谓的短路评估,也称为最小评估,并且一旦找到计算结果为true的表达式(从左到右),就会停止评估条件。
从JLS:
15.24. Conditional-Or Operator ||
The conditional-or operator || operator is like | (§15.22.2), but
evaluates its right-hand operand only if the value of its left-hand
operand is false.
&&以类似的方式操作:
15.23. Conditional-And Operator &&
The conditional-and operator && is like & (§15.22.2), but evaluates
its right-hand operand only if the value of its left-hand operand is
true.
&&和||在知道结果后立即停止评估。因此,例如:
if (a == null || a.get() == null)
之所以运作良好,是因为如果a为null,则不会评估第二部分,并且您不会冒NullPointerException的风险。
如果要对两个表达式都求值,则可以使用无条件的&或|:
if (a == null | a.get() == null)
将评估两个条件,无论第一个条件是否正确。
该线程提供了一些您可能希望发生这种情况的示例。
||和&&都是短路逻辑运算符。
当两个表达式通过OR(||)连接时,如果第一个表达式为true,则答案将始终为true。
|| true false
true true true
false true false