2016-09-18 6 views
-1

Не должен ли этот код порождать деление на ноль?Почему это утверждение не сработает?

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, потому что обе стороны оцениваются.

Смежные вопросы