使用OR运算符时它是否运行两个参数?

时间:2012-08-27 11:54:32

标签: java if-statement operators

  

可能重复:
  && (AND) and || (OR) in Java IF statements

if(foo || bar) {

}

foo 为真时,它是否会进入

3 个答案:

答案 0 :(得分:7)

不,||使用所谓的short-circuit evaluation,也称为最小评估,并在找到一个计算结果为{{的{{em>}时停止评估条件1}}(从左到右)。

来自JLS

  

15.24。条件或算子||

     

条件或运算符||运算符就像| (§15.22.2),但是   仅当左手操作数的值为左手时,才评估其右手操作数   操作数是假的。

true以类似的方式运作:

  

15.23。条件和操作员&&

     

条件和操作员&&就像& (§15.22.2),但评估   只有当左侧操作数的值为时,它的右侧操作数   真。

答案 1 :(得分:1)

||&&都是短路逻辑运算符。

当两个表达式由OR(||)连接时,如果第一个表达式为真,则答案将始终为真。

||      true     false
true    true     true
false   true     false

答案 2 :(得分:1)

&&||会在结果公布后立即停止评估。例如:

if (a == null || a.get() == null)

效果很好,因为如果a为null,则不评估第二部分,并且不会冒NullPointerException风险。

如果您想要评估两个表达式,可以使用无条件&|

if (a == null | a.get() == null)

将评估这两个条件,无论第一个条件是否为真。

This thread给出了您可能希望这种情况发生的案例。