Operatori e Casting

Java non è sempre così rigido

    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:

    • somma = somma + num;   

    diventa:

      • somma += num;  


      Analogamente, java ci semplifica anche incremento e decremento di una variabile. Abbiamo:

      • 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.

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.

javaperstudenti.webnode.it
Creato con Webnode
Crea il tuo sito web gratis! Questo sito è stato creato con Webnode. Crea il tuo sito gratuito oggi stesso! Inizia