2016-09-18 169 views
-1

這個代碼不應該產生除零異常嗎?爲什麼這個if語句失敗?

public class Testing { 
    public static void main(String[] args) { 
     if(6 > 5 || 5/0 == 0) 
      System.out.println("true"); 
    } 
} 

按照precedence rules將不5/0得到6 > 5之前執行的,所以我的印象是,這個代碼將失敗的原因被零異常的鴻溝下。

我知道,Java短路如果語句。所以,如果第一個是真的,那麼它會評估爲真,甚至沒有檢查第二個。

但是,這些優先規則使它看起來像5/0將首先執行?

+1

另請參見http://stackoverflow.com/questions/6800590/what-are-the-rules-for-evaluation-order-in-java – Tunaki

+1

「根據優先規則,5/0不會被執行在6> 5「之前,哪個優先規則正好讓你這麼想? – Pshemo

+0

如果語句從左到右評估 –

回答

1

不,它不應該。對邏輯運算符的第一面進行評估以便短路。如果語句從左向右評估。在您的示例中,6 > 5首先被評估,因爲它位於邏輯運算符的左側。這是真的,所以下一個條件不檢查。現在,如果你使用|運營商,也不會短路:

if(6 > 5 | 5/0 == 0) { ... } 

,這將拋出一個ArithmeticException因爲雙方進行評估。