¿Por qué intercambiar con xor funciona bien en c ++ pero en java no? algún rompecabezas [duplicado]

Posible duplicado:
¿Por qué esta declaración no funciona en java x ^ = y ^ = x ^ = y;

Código de muestra

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

En c ++ intercambia variables, pero en java obtenemos a = 0, b = 4 ¿por qué?

Respuestas a la pregunta(2)

Su respuesta a la pregunta