Java comprende 5 operatori per laritmetica di base, come
mostrato nella tabella seguente:
|
OPERATORE |
SIGNIFICATO |
ESEMPIO |
|
+ |
Somma |
1 + 2 |
|
- |
Sottrazione |
10 - 5 |
|
* |
Moltiplicazione |
2 * 8 |
|
/ |
Divisione |
16 / 4 |
|
% |
Modulo |
33 % 17 |
Tutti gli operatori richiedono due operandi, uno a destra e uno
a sinistra, e permettono di realizzare le istruzioni aritmetiche
fondamentali nella forma che tutti conosciamo.
Unattenzione particolare merita loperazione di divisione,
che genera un intero se entrambi gli operandi appartengono ad uno
dei tipi interi, o un numero in virgola mobile se gli operandi sono
float o double; inoltre la divisione tra interi genera
un numero intero, arrotondando il risultato se necessario.
Ad es. il programma:
class TestDivisione {
public static void main(String args[]) {
short i = 7;
short j = 3;
System.out.println(i/j);
}
}
stampa a video il numero 2, in quanto loperazione di divisione
produce un valore non intero (2.33) che viene arrotondato troncando
la parte decimale.
Il modulo, che utilizza loperatore %, restituisce il resto
di una divisione, ad es. 33 % 17 restituisce 16, perché il numero
17 sta una volta nel numero 33 con resto di 16.
E bene ricordare che la maggior parte delle operazioni che
coinvolgono interi produce un tipo int indipendentemente
dal tipo di operandi originari, cosicché spesso è necessario ricorrere
al casting per effettuare assegnamenti a variabili di tipo più ristretto
(ad es. byte o short).
Riguardo allassegnamento, Java consente di legarne più di
uno in ununica istruzione del tipo:
x = y = z = 7;
Nel codice di esempio viene assegnato a z il valore 7, a y il nuovo
valore di z (quindi 7) e a x il nuovo valore di y (sempre 7); ciò
avviene perché la parte destra di unespressione di assegnamento
viene valutata prima di eseguire lassegnamento stesso.
Sebbene questa rappresenti una buona possibilità per rendere il
codice più compatto, ne viene comunque sconsigliato luso,
perché può rendere più difficile la comprensione del programma.
Utilizzare unespressione per modificare il valore di una variabile
è unoperazione molto comune alla quale si deve ricorrere e
in Java esistono degli operatori utilizzati appositamente per questo
scopo, come mostrato nella tabella seguente:
|
ESPRESSIONE |
SIGNIFICATO |
|
x += y |
x = x + y |
|
x -= y |
x = x - y |
|
x *= y |
x = x * y |
|
x /= y |
x = x / y |
|
x %= y |
x = x % y |
Queste forme abbreviate sono molto comode ed equivalgono funzionalmente
alle istruzioni di assegnamento, ma se si utilizzano espressioni
complesse, possono verificarsi casi in cui gli operatori non sono
equivalenti, per cui è opportuno, in tali casi, non ricorrere alle
forme abbreviate.
Ad es. le due istruzioni:
x = x / y + 5 ;
x /= y + 5 ;
non producono lo stesso risultato: infatti nel primo caso viene
prima eseguita la divisione e poi la somma, mentre nel secondo caso
viene prima eseguita la somma e poi la divisione.
Altri due operatori sono il minus unario e il plus unario, che
vengono utilizzati premettendo, rispettivamente, il segno - e il
segno + al nome della variabile.
Il minus unario restituisce il valore della variabile che
precede con segno opposto; il plus unario fornisce loperazione
simmetrica a quella precedente e non sortisce, a conti fatti, nessun
effetto, poiché restituisce inalterato il valore della variabile
che lo segue.
Il codice:
int x = 5;
int y = -x;
int z = +x;
inizializza x al valore 5, assegna il valore 5 a y e il valore
5 (identico a quello di x) a z.
Infine sono molto utilizzati gli operatori di incremento
(++) e decremento (--), che permettono, rispettivamente,
di aggiungere e sottrarre 1 al valore della variabile.
Possono essere usati in notazione prefissa o suffissa, cioè precedere
o seguire il nome della variabile che modificano.
Questa differenza ha importanza implementativa, perché la notazione
prefissa incrementa il valore della variabile prima di valutare
lespressione alla quale la variabile appartiene, mentre la
notazione suffissa esegue prima la valutazione
dellespressione e dopo incrementa la variabile.
Ad es. il codice:
int x, y ,z;
x = 18;
y = x++;
z = ++x;
inizializza x, assegna a y il valore 18 e incrementa x, dopodiché
incrementa x e assegna a z il suo nuovo valore, cioè 20. Nella prossima
puntata analizzeremo gli operatori logici.
Torna all'indice Generale del corso di Corso di Java di Software Planet