176 votes

Fait la Java & = opérateur applique & ou && ?

En supposant que

Je me demandais si :

équivaut à

ou d’autre part, cela signifie

Merci d’avance.

182voto

Stephen C Points 255558

De la Java Language Specification - 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))T est le type d' E1, sauf qu' E1 est évaluée qu'une seule fois.

Donc, a &= b; est équivalent à a = a & b;.

(Dans certains usages, le type de moulage en fait une différence pour le résultat, mais dans celle - b être boolean et le type de fonte ne fait rien.)


Dans la pratique, il y a peu de différence entre a = a & b; et a = a && b;. Si b est une variable ou une constante, le résultat va être le même pour les deux versions. Il y a seulement une différence sémantique lors de l'évaluation de l' b peut avoir des effets secondaires; c'est à dire quand c'est un non-trivial sous-expression.

Du côté de la performance, le compromis entre le coût de l'évaluation de l' b, et le coût d'un test et de la direction générale de la valeur de a, et le potentiel d'économie d'éviter une inutile cession a. L'analyse n'est pas simple, mais, à moins que le coût de calcul de b est non-trivial, le potentiel de différence de performances entre les deux versions est susceptible d'être trop petit pour être utile d'examiner.

54voto

stew Points 5897

voir 15.22.2 de la JLS. Pour les opérandes booléens, l' & opérateur booléen, pas au niveau du bit. La seule différence entre && et & pour les opérandes booléens, c'est que pour && il est en court-circuit (ce qui signifie que le second opérande n'est pas évaluée si le premier opérande est false).

Donc dans votre cas, si b est un primitif, a = a && b, a = a & b, et a &= b tous faire la même chose.

27voto

Philippe Leybaert Points 62715
cest le seul qui reste

-5voto

Daniel Testa Points 11

Je suis tombé sur une situation similaire à l’aide de valeurs booléennes où j’ai voulu éviter d’appeler b() si un était déjà fausse.

Cela a fonctionné pour moi :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X