ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Basi | Espressioni | Comandi | Classi | Ereditarieta | Eccezioni | Thread | Utilita | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

Espressioni
Espressioni
Primitivi
Costanti
Booleane
Carattere
Numeri
Operatori
Promozione
Overloading
Aritmetici
Virgola Mobile
Relazionali
Binari
Shift
Negazione
And
Or
Condizionale
Incremento
Assegnamento

<<< Assegnamento
a = b è una espressione con effetti collaterali:
modifica a e ritorna b
a = b = c equivale a a = (b = c)

abbiamo già discusso questa caratteristica delle espressioni di Java quando abbiamo discusso di espressioni in generale. Si tratta per fatto che l'operatore = e un operatore con effetti collaterali, che ritorna un valore e causa la modifica di uno degli operandi.

b=c modifica b e ritorna il valore di c che serve a modificare a.
Il tutto vale c, valore scartato

scrivendo a = 1 si assegna uno ad a, e si ritorna il valore 1, che può essere assegnato ad un'altra variabile. Alla fine di una serie di assegna menti si ha comunque un valore di una espressione che però viene scartato.

a += b
equivale a a = a + b

in Java sono presenti alcuni operatori che non solo effettuano un assegnamento, ma anche si occupano di effettuare una operazione. Il più semplice è +=. Scrivere a+=1 può essere considerato una abbreviazione di a = a + 1.

però a[f()] += b non equivale a a[f()]=a[f()]+b

C'è una cosa a cui bisogna stare bene attenti: che l'espressione suddetta non è esattamente equivalente a come scritto. In realtà quello che succede è un pò più complesso. Diciamo che l'operaatore accede alla zona di memoria dove è contenuto il valore, fa il calcolo e gli rimette dentro il valore incrementato in una sola passata. Se trascrivo letteralmente l'espressione illustrata nell'esempio (che è un pò più complessa), dovrei chiamare due vole la funzione f(). Questa funzione potrebbe avere effetti collaterali. Usando += gli effetti collaterali avvengono una vola sola.

altri operandi, stesso comportamento (cambia l'operatore di calcolo)

Tutto il discorso fatto per += vale senza cambiamenti anche per gli altri operatori come *=, /= eccetera. Il comportamento è esattamente lo stesso, quello che cambia è solo l'operatore su cui viene fatto il calcolo. Nella prossima tabella sono riassunti i vari operatori e il loro uso in dettaglio.

Operatore Significato
-= sottrazione
*= moltiplicazione
/= divisione
%= modulo
&= and
|= or
^= or esclusivo
>>= shift a destra
<<= shift a sinistra con segno
<<<= shift a sinistra senza segno

Si può notare come siano presenti tutti gli operatori che hanno senso. Per esempio abbiamo &= che fa l'and binario del contenuto di una variabile con una maschera di bit. Non è invece presente un ipotetico &&=, anche perchè, avendo un comportamento a corto circuito, non è possibile tradurlo in maniera sensata con un operatore di assegnamento.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com