2016-09-18 3 views
-1

이 코드가 0으로 나누기 예외를 생성해서는 안됩니까? 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 전에 실행되지 것, 그래서 나는이 코드로 인해 제로 예외로 나누기에 실패하는 인상입니다.

자바 단락 if 문을 알고 있습니다. 따라서 첫 번째가 참이면 두 번째를 확인하지 않고도 참으로 평가됩니다.

그러나 우선 순위 규칙에 따라 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

아니요. 논리 연산자의 첫 번째면은 단락 회로를 위해 평가됩니다. 문이 왼쪽에서 오른쪽으로 평가되는 경우. 귀하의 예제에서 6 > 5은 논리 연산자의 왼쪽에 있기 때문에 먼저 계산됩니다. 다음 조건을 점검하지 않기 때문에 사실입니다. 이제 | 연산자를 사용하는 경우, 그것은 단락하지 않습니다 : 양쪽이 평가되기 때문에

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

이것은 ArithmeticException 발생합니다.

관련 문제