У меня есть два похожих вопроса о приоритетах операторов в Java.
Первый:
int X = 10;
System.out.println(X++ * ++X * X++); //it prints 1440 
Согласно учебник Oracle: 
Операторы postfix (expr ++, expr--) имеют более высокий приоритет, чем префикс (++ expr, --expr)
Итак, я полагаю, что порядок оценки:
1) first postfix operator: X++ 
   1.a) X++ "replaced" by 10
   1.b) X incremented by one: 10+1=11
   At this step it should look like:  System.out.println(10 * ++X * X++), X = 11;
2) second POSTfix operator: X++ 
   2.a) X++ "replaced" by 11
   2.b) X incremented by one: 11+1=12
   At this step it should look like:  System.out.println(10 * ++X * 11), X = 12;
3) prefix operator: ++X
   3.a) X incremented by one: 12+1=13
   3.b) ++X "replaced" by 13
   At this step it should look like:  System.out.println(10 * 13 * 11), X = 13;
4) evaluating 10*13 = 130, 130*11 = 1430.
Но Java, похоже, игнорирует порядок PRE/POST и помещает их на один уровень. Итак, реальный порядок:
 X++ -> ++X -> X++ 
что заставляет отвечать (10 * 12 * 12) = 1440.
Второй:
    int a=1, b=2;             
    a = b + a++;
Часть принятого ответа:
"К моменту назначения ++ уже увеличил значение a до 2 (из-за приоритета), поэтому = перезаписывает это увеличенное значение." 
ОК, посмотрим шаг за шагом:
 1) replacing "b" with 2
 2) replacing "a++" with 1
 3) incrementing "a" by 1 -> at this point a==2
 4) evaluating 2+1 = 3
 5) overwriting incremented value of "a" with 3
Кажется, все в порядке. Но пусть немного изменится в этом коде (замените "=" на "+ =" )
    a += b + a++;
шаги 1-4 должны быть такими же, как указано выше. поэтому после шага 4 мы имеем что-то вроде этого:
    a += 3;
где a==2
И тогда я думаю: ОК, a = 2+3, поэтому a должен быть 5. НО ответ только 4
Я действительно смущен. Я уже провел пару часов, но до сих пор не могу понять, где я ошибаюсь.
P.S. Я знаю, что я не должен использовать этот "стиль" в реальных приложениях. Я просто хочу понять, что не так в моих мыслях.
