Поведение логических выражений Java

Это мой первый пост здесь, поэтому, пожалуйста, простите любые ошибки протокола.

Мой вопрос просто пытается понять, что происходит со следующим кодом Java. Я полностью понимаю, что использование круглых скобок могло бы все прояснить, но полученный результат, кажется, идет вразрез с соглашением относительно порядка операций Java.

public class Tester
{
   public static void main(String[] args)
   {
    int total=9, num=13;
    if (total>4 || ++num>15 && total>0)
    {
           System.out.println("short");
    }
    System.out.println(num);
   }
}

Вывод :короткая 13

Очевидно, что ++num не выполнился. Если бы соблюдался строгий порядок действий, это должно было произойти в первую очередь. Это не так. Итак, далее идет &&. Если && выполняется в порядке приоритета над ||, то то же самое... сначала должно произойти ++num. Это не так. Итак, мне кажется, что вывод был определен с помощью || выполняется первым, сокращая ++num, а затем, работая с &&, приводит к выводу короткого . Был ли просто игнорирован порядок выполнения правил и логическое выражение выполнялось слева направо? Является ли оператор приращения причиной неправильного поведения?

Спасибо за любое понимание того, что на самом деле происходит с этим кодом.

5
задан user1580609 7 August 2012 в 01:28
поделиться