a++-++a в Java пост и пред инкременты

Сломать мозг можно... Почему результат -2 ?

int a = 0;
System.out.println(a++-++a);

Сломать, потому что даже если а = любому другому значению, результат всегда -2.

Кто-то может объяснить ?

П.с. Объяснить для человека, который только недавно понял почему сравнивая Integer 127 получаем значения true, а 128 false


Ответы (2 шт):

Автор решения: Qwertiy
a++ - ++a
^----------- x
 ^^--------- a = x+1
^^^--------- x
        ^--- x+1
      ^^---- a = x+2
      ^^^--- x+2
    ^------- x - (x+2)
             -2
→ Ссылка
Автор решения: Alex Rudenko

Результат именно таков, потому что в Java приоритет операций постфиксного/префиксного инкремента x++/++x приоритет выше, чем операция вычитания; вычисления сложных выражений вычисляются в порядке слева направо:

  • a++ - ++a
  1. a++ - результатом операции остается 0, в a становится 1
  2. ++a - результатом операции остается 2, в a становится 2
  3. 0 - 2 = -2

  • ++a - a++
  1. ++a - результатом операции остается 1, в a становится 1
  2. a++ - результатом операции остается 1, в a становится 2
  3. 1 - 1 = 0

  • ++a - ++a
  1. ++a - результатом операции остается 1, в a становится 1
  2. ++a - результатом операции остается 2, в a становится 2
  3. 1 - 2 = -1

  • a++ - a++
  1. a++ - результатом операции остается 0, в a становится 1
  2. a++ - результатом операции остается 1, в a становится 2
  3. 0 - 1 = -1
→ Ссылка