Dal linguaggio Java Specification - 15.26.2 Compound Assignment Operators.
Un assegnamento espressione composto della forma E1 op= E2
è equivalente a E1 = (T)((E1) op (E2))
, dove T
è il tipo di E1
, tranne che E1
viene valutata solo una volta.
Così a &= b;
è equivalente a a = a & b;
.
(In alcuni usi, il tipo-casting fa la differenza al risultato, ma in questo b
deve essere boolean
e il tipo pressofuso non fa nulla.)
In pratica, v'è poca differenza tra a = a & b;
e a = a && b;
. Se b
è una variabile o una costante, il risultato sarà lo stesso per entrambe le versioni. C'è solo una differenza semantica quando la valutazione di b
può avere effetti collaterali; cioè quando è una sottoespressione non banale.
Sul lato prestazioni, il trade-off è tra il costo di valutazione b
, e il costo di un test e ramo del valore di a
, e il potenziale risparmio di evitare un'assegnazione inutile a
. L'analisi non è semplice, ma a meno che il costo del calcolo di b
non sia banale, è probabile che la differenza di prestazioni potenziale tra le due versioni sia troppo piccola per essere valutata.
fonte
2010-10-11 14:49:16
Così (un &= b;) non sarà corto circuito se b è una chiamata di metodo? c'è qualcosa come un operatore "&& ="? – is7s
corretto. b() è chiamato. Non c'è un operatore && =. – stew
Sembra che questo non risponda alla domanda; l'OP sapeva già di corto circuito. –