JAVA中的OR运算_关于java:使用OR运算符时,是否同时运行两个参数?

本问题已经有最佳答案,请猛点这里访问。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值