Operatori e Casting
Java non è sempre così rigido
- + =
- - =
- / =
- * =
- somma = somma + num;
- somma += num;
- variabile++; // Valuta la variabile, poi la incrementa.
- ++variabile; // Incrementa la variabile, poi la valuta.
- variabile--; // Valuta la variabile, poi la decrementa.
- --variabile; // Decrementa la variabile, poi la valuta.
Operatori
Operatori abbreviati
Quante volte vi è capitato di fare una somma progressiva? Sicuramente più di una. Per questo motivo java ha ben pensato di metterci a disposizione una serie di agevolazioni, rivolto soprattutto a chi vuole scrivere il meno possibile: gli operatori abbreviati. Essi sono:
Per esempio:
diventa:
Analogamente, java ci semplifica anche incremento e decremento di una variabile. Abbiamo:
Il caso più evidente per capire la differenza che c'è tra variabile++ e ++variabile è quello con la stampa a video. Supponiamo di avere x = 0:
- System.out.println(x++); // L'output sarà 0.
- System.out.println(++x); // L'output sarà 1.
Operatori di confronto Operatori logici
Casting
Il casting serve per "forzare" la conversione di una variabile di un certo tipo in un altro: da float a double, da short a long, da byte a int... Ovviamente non aspettatevi che la conversione di un float (o un double) in un int sia esatta, poiché perderebbe la parte decimale.
Il casting è effettuato mettendo il tipo voluto tra parentesi, prima della variabile (o del valore).
Vediamo alcuni esempi, utilizzando la stampa a video. Sia x una variabile intera inizializzata a cinque (int x = 5). Allora abbiamo:
- System.out.println((short)x); // L'output vale "5"
- System.out.println((float)x); // L'output vale "5,0"
- System.out.println((double)x); // L'output vale "5,0"
Ma cosa sarebbe accaduto se avessimo avuto la variabile x inizializzata a 130 (int x = 130) e avessimo dovuto trasformarla in un byte?
- System.out.println((byte)x); // L'output vale "-126"
Questo perché il tipo byte lavora da -127 a 127, quindi il 130 non è rappresentabile dal byte. Bisogna stare attenti con queste conversioni, altrimenti si rischia di ottenere un risultato errato.
Procediamo con un ultimo esempio (consideriamo due variabili x e y inizializzare, rispettivamente, a 48 e 50):
- System.out.println((char)x); // L'output vale "0"
- System.out.println((char)y); // L'output vale "2"
Vi starete chiedendo come sia possibile convertire un numero in un carattere. Ma la domanda giusta da porsi è: com'è possibile che la conversione in un carattere mi dia in output un numero? Permettetemi di fare degli ultimissimi esempi per farvi capire meglio.
Abbiamo: int x = 100 e char c = 'a'
- System.out.println((char)x); // L'output vale "d"
- System.out.println((int)c); // L'output vale "97"
Notate niente di strano? Entrambi gli esempi hanno una cosa in comune: il codice ASCII. Se andiamo a vedere la tabella del codice noteremo che il numero 100 corrisponde alla lettera "d" e il carattere "a" corrisponde al numero 97. Prendendo gli altri due esempi antecedenti, il 48 e il 50 sono codificati in ASCII, rispettivamente, in 0 e 2. Dunque la conversione di un numero intero in ASCII si fa attraverso il casting.
