This question already has answers here:
Java operators precedence
                                
                                    (2个答案)
                                
                        
                                5年前关闭。
            
                    
嗨,我有这个例子:

  (1)
  if(false && false ||true){
            System.out.println("a");
  }


结果:

a




  (2)
  if(false && false | true){
            System.out.println("a");
  }


结果:

(empty)


在情况(1)中,我们将OR短路,而在第二种情况中,我们将OR短路。行为的差异从何而来?我知道表达式是从左到右求值的,并且AND的优先级比OR大,所以我不知道为什么情况2会发生这种情况?

最佳答案

(1)

if (false && false || true) {
    System.out.println("a");
}


此处&&的优先级高于||


首先评估false && false得出的false
false || true得到评估结果true


因此结果输出为“ a”。

(2)

if (false && false | true) {
    System.out.println("a");
}


此处|的优先级高于&&


首先评估false | true得出的true
false && true得到评估结果false


所以什么也没输出。

希望有道理

10-07 19:31
查看更多