2014-09-28 15 views
1

嗨聲明我有這樣的例子:多個邏輯表達式,如果在Java中

(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中發生這種情況?

回答

3

(1)

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

這裏&&的優先級高於||

  1. false && false得到第一評價所得false
  2. false || true得到評估結果true

所以輸出結果 「一」。

(2)

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

這裏|的優先級高於&&

  1. false | true得到第一評價所得true
  2. false && true得到評估結果false

所以沒有輸出。

希望它是有道理的

4

&&優先於||但不超過|。見operator precedence list

+0

SO首先將被計算爲false | true - > true,然後false && true-> false? – Xelian 2014-09-28 09:53:04

+1

@Xelian正好。 – assylias 2014-09-28 09:57:08