2016-09-18 9 views
-1

このコードはゼロ除算例外を生成しませんか? precedence rulesによるとなぜこのif文は失敗しますか?

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

5/06 > 5前に実行されませんでしたので、私はこのコードはゼロ例外によってによる除算に失敗するだろうという印象の下にいます。

私はJavaショートサーキットifステートメントを認識しています。したがって、最初のものが真であれば、2番目のものをチェックすることなく真と評価されます。

しかし、これらの優先ルールによって、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

if文が左から右に評価されます –

答えて

1

いいえ、いけません。論理演算子の第1の側は、短絡のために評価される。 if文が左から右に評価されます。あなたの例では、論理演算子の左にあるので、6 > 5が最初に評価されます。次の条件がチェックされないので、本当です。今、あなたは|演算子を使用している場合、それは短絡しません:両側が評価されるため

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

これはArithmeticExceptionをスローします。

関連する問題