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
a++- результатом операции остается 0, вaстановится 1++a- результатом операции остается 2, вaстановится 20 - 2 = -2
++a - a++
++a- результатом операции остается 1, вaстановится 1a++- результатом операции остается 1, вaстановится 21 - 1 = 0
++a - ++a
++a- результатом операции остается 1, вaстановится 1++a- результатом операции остается 2, вaстановится 21 - 2 = -1
a++ - a++
a++- результатом операции остается 0, вaстановится 1a++- результатом операции остается 1, вaстановится 20 - 1 = -1