Corso di Java

Tipi di dati primitivi e casting

 

Abbiamo già visto come dichiarare gli attributi di una classe tramite variabili e costanti, ora vedremo di che tipo possono essere.
Un tipo di dato definisce i valori ammessi per una variabile appartenente al tipo e può essere:
- uno degli otto tipi primitivi;
- il nome di una classe o di un’interfaccia;
- un array.
I tipi di dato primitivi comprendono:
- i tipi per i numeri interi e a virgola mobile;
- i caratteri;
- i valori booleani (true e false).
e sono detti primitivi perché sono stati incorporati nel linguaggio Java, anziché essere oggetti effettivi, allo scopo di renderne più efficiente l’impiego.

Per le variabili che possono assumere solo valori interi, esistono in Java 4 tipi, il cui utilizzo dipende più che altro dalla dimensione dell’intero, ossia dal range di valori che può assumere:

TIPO

DIMENSIONE

INTERVALLO DI VALORI

byte

8 bit

da –128 a 127

short

16 bit

da –32768 a 32767

int

32 bit

da –2147483648 a 2147483647

long

64 bit

da –9223372036854775808 a 9223372036854775807


Notiamo che non esistono tipi interi senza segno e che le loro dimensioni e caratteristiche sono indipendenti dalla piattaforma e dal sistema operativo.

Per le variabili che possono assumere valori a virgola mobile esistono 2 tipi:

TIPO

DIMENSIONE

INTERVALLO DI VALORI

float

32 bit

da 1.4E-45 a 3.45E+38

double

64 bit

da 4.9E-324 a 1.7E+308


Oltre a differire per il range di valori che possono assumere, questi due tipi differiscono anche per la precisione (infatti il tipo double ha una precisione maggiore del tipo float) e ovviamente anche per lo spazio di memoria occupato.
Riprendiamo il codice della classe “Automobile” e verifichiamo che la scelta di dichiarare gli attributi capacitaSerbatoio, livelloRiserva, consumo e quantitaBenzina di tipo float è una buona scelta, in quanto questo tipo è sufficiente a rappresentarli.
Il settimo dei tipi fondamentali è il tipo char, utilizzato per singoli caratteri quali lettere, numeri, segni di punteggiatura e altri simboli. Questo tipo di dato ha dimensione di 16 bit e utilizza la codifica dello standard Unicode, che permette di gestire migliaia di caratteri.

Un carattere deve essere racchiuso tra singoli apici e può essere anche un carattere non stampabile o non accessibile da tastiera; questi ultimi possono essere rappresentati per mezzo di codici speciali, elencati nella seguente tabella:

CODICE

SIGNIFICATO

\n

nuova riga

\t

tabulatore

\b

cancella il carattere a sinistra

\r

ritorno a capo

\f

avanzamento pagina

\\

barra inversa

\’

apice

\”

doppio apice


Ad es. è possibile scrivere:

char nuovaRiga = ‘\n’;
char letteraA = ‘A’;

Infine l’ottavo tipo fondamentale è boolean, che può contenere il valore true (vero) o il valore false (falso); è possibile assegnare:

boolean autoradio = true;
boolean antifurto = false;


Per ognuno di questi tipi di dati esistono delle classi omonime, ma scritte con l’iniziale maiuscola, che hanno funzionalità diverse (quindi non interscambiabili con essi), la cui corrispondenza è mostrata in tabella:

TIPO PRIMITIVO

OGGETTO CORRISPONDENTE

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

char

Character

boolean

Boolean


E’ possibile convertire un tipo primitivo in un altro tramite l’operazione di casting.

Il casting è un’operazione che può essere pensata come avente un’origine (il valore da convertire in un altro tipo) e una destinazione (la variabile cui viene assegnato il valore convertito) ed ha la seguente forma:

variabileDestinazione = (nuovoTipo) valoreOrigine;

Questa operazione è necessaria se vogliamo assegnare un valore ad un tipo più piccolo, ad es. un int ad un byte, perché può portare alla perdita di informazioni, ma possiamo benissimo assegnare un valore int ad una variabile di tipo float, perché ciò non comporta perdita di informazioni.
Ad es.

int x = 5;
double y = x;


è possibile e non richiede alcun casting.

Nel seguente esempio:

int z = (int) (x / y);

a z di tipo int è assegnato il valore del risultato della divisione di x per y.
Il casting non è ammesso per i valori booleani e può essere effettuato anche tra oggetti appartenenti a classi diverse (questo lo vedremo in seguito).
Nella prossima lezione vedremo come dichiarare i metodi per la classe “Automobile”.

 

Torna all'indice Generale del corso di Corso di Java di Software Planet