Por que trocar com o xor funciona bem em c ++, mas em java não? algum quebra-cabeça [duplicado]

Possível duplicado:
Por que esta declaração não está funcionando em java x ^ = y ^ = x ^ = y;

Código de amostra

int a=3;
int b=4;
a^=(b^=(a^=b));

Em c ++, ele troca variáveis, mas em java obtemos a = 0, b = 4, por que?

questionAnswers(2)

yourAnswerToTheQuestion