Plus correctement, x | = y est en fait calculé comme x = x | (y).
Voici un exemple intéressant de la raison pour laquelle ceci est important.
int c = 2;
c %= c++ * ++c;
La conséquence intéressante est ici qu'il serait écrit
c = c % (c++ * ++c);
spécifications Java nous disent que la machine virtuelle Java verra le c initial d'abord et le stocker, quoi que ce soit qui le précède n'a aucun effet sur Ainsi, C++ & ++ c n'affectera pas réellement le résultat du calcul. Ce sera toujours c = 2% ce qui équivaut à 2 :)
C'est exact +1 –