Donc, pour les opérateurs binaires sur les booléens, Java a &
, |
, ^
, &&
et ||
.
Résumons ce qu'ils font ici brièvement:
- JLS 15.22.2 Booléens les Opérateurs &, ^, et |
- JLS 15.23 Conditionnel Et l'Opérateur &&
- JLS 15.24 Conditionnelle Ou Opérateur ||
Pour
&
, la valeur du résultat esttrue
si les deux opérandes de l'valeurs sonttrue
; sinon, le résultat estfalse
.Pour
|
, la valeur du résultat estfalse
si les deux opérandes de l'valeurs sontfalse
; sinon, le résultat esttrue
.Pour
^
, la valeur du résultat esttrue
si l'opérande valeurs sont différentes, sinon, le résultat estfalse
.L'
&&
opérateur est comme&
mais évalue sa droite opérande seulement si la valeur de sa main gauche opérande est -true
.L'
||
opérateur est comme|
, mais évalue sa droite opérande seulement si la valeur de sa main gauche opérande est -false
.
Or, parmi tous les 5, 3 de ceux qui ont composé l'affectation des versions, à savoir l' |=
, &=
et ^=
. Donc ma question est évidente: pourquoi ne pas Java fournissent &&=
et ||=
? Je trouve que j'ai besoin de ces plus que je besoin d' &=
et |=
.
Et je ne pense pas que "parce que c'est trop long" est une bonne réponse, parce que Java a >>>=
. Il doit y avoir une meilleure raison de cette omission.
De 15.26 Opérateurs D'Affectation:
Il y a 12 opérateurs d'affectation; [...]
= *= /= %= += -= <<= >>= >>>= &= ^= |=
Un commentaire a été fait que si &&=
et ||=
ont été mises en œuvre, alors il serait le seul des opérateurs qui ne sont pas d'évaluer le côté droit en premier. Je crois que cette notion que l'opérateur d'assignation composé évalue le côté droit de la première est une erreur.
De 15.26.2 Composé Des Opérateurs D'Affectation:
Un composé expression d'affectation de la forme
E1 op= E2
est équivalent àE1 = (T)((E1) op (E2))
oùT
est le type d'E1
, sauf qu'E1
est évaluée qu'une seule fois.
Pour preuve, l'extrait de code suivant renvoie une NullPointerException
, pas un ArrayIndexOutOfBoundsException
.
int[] a = null;
int[] b = {};
a[0] += b[-1];