Tipi Primitivi e Casting

Indice Tutorial

Tipi Primitivi

Java ha un insieme di tipi base già definiti e pronti all’uso. Essi vengono detti tipi primitivi.

Essi sono:

  • byte: ossia tutti gli interi da -128 a 127 incluso. In memoria occupa 8 bit.
  • short: da -32768 a 32767 incluso. 16 bit
  • int: da -2147483648 a 2147483647 incluso. 32 bit
  • long: da -9223372036854775808 a 9223372036854775807 incluso. 64 bit. In genere si aggiunge il suffisso l o L. es. long prova = 500L;
  • float:  per numeri con la virgola, fino a 7 cifre dopo la virgola.  Occupano 32 bit. In genere si aggiunge il suffisso f o F.
  • double:  per numeri con la virgola, fino a 16 cifre dopo la virgola.  Occupano 64 bit. In genere si aggiunge il suffisso d o D. Se non è specificato, un numero con la virgola è considerato un double.
  • boolean: serve a rappresentare i valori vero o falso. es. boolean pro = true; 
  • char: è utilizzato per la memorizzazione di caratteri.

Il casting è un meccanismo che consente di convertire i dati da un tipo a un altro (per ora intendiamo tipi primitivi).

Esempio:

                short c = 10;
		int d = c;

Questo conversione può essere fatta senza problemi, perché siamo sicuri che il valore contenuto in c potrà essere sicuramente contenuto in d, essendo il range del tipo int più grande di quello del tipo short.

Ma cosa succede se facciamo l’operazione inversa? Ossia cerchiamo di convertire un int in un short?

Esempio:

                int a = 10;
		short b = a;--> errore di compilazione

Il compilatore ci segnala l’errore perché c’è il pericolo di perdita di precisione: infatti un numero intero potrebbe essere più grande di un numero short.

Possiamo ignorare questa segnalazione effettuando un cast esplicito, cioè vengono inserite una coppia di parentesi, indicando all’interno il tipo dati in cui convertire la variabile “a”.

Esempio:

		int a = 10;
		short b = (short) a;

in questo modo il programmatore si sta assumendo il rischio di una eventuale perdita di precisione. Ma che succede se il valore di “a” è più grande di “b”?

Esempio:

		int a = 100000;
		short b = (short) a;

dentro b ci sarà il valore “-31072”, cioè, in questo caso, il valore inferiore del range di short.

In un casting, per esempio, tra double e float invece perdiamo le ultime cifre decimali.

Esempio:

		double a = 0.100000234523;
		float b =  (float)a;-->dentro “b” ci sarà il valore approssimato “0.10000023”