Многократное назначение на одной строке не работает должным образом

Я пытаюсь обменять дваintс -x а такжеy в примере, и сделать это в одну строку без функции библиотеки.

Итак, я начал с этого:

int x = 4;
int y = 3;

System.out.println(x);
System.out.println(y);

x ^= y;

System.out.println(x);
System.out.println(y);

y ^= x;

System.out.println(x);
System.out.println(y);

x ^= y;

System.out.println(x);
System.out.println(y);

Выход был4, 3, 7, 3, 7, 4, 3, 4 как и ожидалось. Пока все хорошо.

Далее было это:

int x = 4;
int y = 3;

System.out.println(x);
System.out.println(y);

y ^= (x ^= y);

System.out.println(x);
System.out.println(y);

x ^= y;

System.out.println(x);
System.out.println(y);

Выход был4, 3, 7, 4, 3, 4 как и ожидалось еще раз. Пока все еще хорошо.

Тогда наконец это:

int x = 4;
int y = 3;

System.out.println(x);
System.out.println(y);

x ^= (y ^= (x ^= y));

System.out.println(x);
System.out.println(y);

На этом этапе вывод стал4, 3, 0, 4, Теперь я знаю, что0 является результатом4 ^ 4 посколькуx задание не было выполнено в то время - почему это происходит? Почему неx ^= y на самом деле назначить7 кx переменная, так что становится7 ^ 4 для последнего назначения?

Ответы на вопрос(3)

Ваш ответ на вопрос