Tipi primitivi in Java Introduzione I tipi in Java possono essere classificati in tipi primitivi e tipi riferimento (object reference). Ogni linguaggio di programmazione fornisce un certo numero di tipi primitivi. In generale, con il termine tipo primitivo si intende un tipo di dato già definito nel linguaggio, dal quale si può partire per la costruzione di espressioni, o di tipi composti. Per ogni tipo primitivo sono anche disponibili una serie di operatori che consentono di scrivere espressioni (es. + è un operatore per i tipi numerici). La distinzione tra tipi primitivi e tipi riferimento è tuttavia più sottile e si basa sul modo in cui i valori sono indirizzati nella memoria del computer; ma di questa questione ce ne occuperemo in seguito. Prima di iniziare l’analisi dei tipi primitivi di Java, osservate la seguente figura che offre una panoramica sui tipi del linguaggio.
Tipi Java
primitivi
numerici
interi
caratteri
riferimento
booleani
array
stringhe
classi
virgola mobile
Fig.1 Tipi Java
Tipo intero Il tipo intero coincide con l’insieme dei numeri interi Z. Z= {…,-3,-2,-1,0,+1,+2,+3,…} Una variabile di tipo intero può quindi assumere, di volta in volta, un valore tra quelli dell’insieme Z. Occorre osservare che, mentre l’insieme dei numeri interi Z contiene infiniti elementi, la memoria di un computer non è infinita. Di conseguenza una variabile intera può assumere i valori compresi tra un minimo numero intero (MININT) e un massimo numero intero (MAXINT) che coincidono con il minimo e il massimo numero intero rappresentabile. Se si supera il MININT (es. con una sottrazione MININT-1) o il MAXINT (es. con MAXINT+1) si verifica rispettivamente un underflow e un overflow (traboccamento). Java, in questa situazione, non segnala alcun errore ma il risultato restituito è imprevedibile e sicuramente errato.
Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/14
1
Java fornisce diversi tipi interi, che si distinguono proprio per il MININT e il MAXINT; essi sono riassunti nella tabella seguente. parola chiave byte short int long
spazio intervallo di valori occupato 8 bit MININT= 27 MAXINT= 27-1 16 bit MININT= 215 MAXINT= 215-1 32 bit MININT= 231 MAXINT= 231-1 64 bit MININT= 263 MAXINT= 263-1
caratteristiche utilizzati per manipolare bit poco utilizzati più utilizzati poco utilizzati
Osservazioni I numeri interi possono essere rappresentati in base 8 (numeri ottali) anteponendo al numero uno zero. Per esempio, 034 rappresenta il numero ottale 34 e non il numero decimale 34. Pertanto, i numeri interi in base 10 non possono mai iniziare con zero. I numeri interi possono essere rappresentati in base 16 (numeri esadecimali) anteponendo al numero uno zero e una x (maiuscola o minuscola). Per esempio, 0x912 è il numero esadecimale 912. Le costanti numeriche intere esplicite (per intenderci, i numeri che compaiono in una espressione) sono sempre considerate interi a 32 bit, cioè di tipo int. Per rendere una costante numerica esplicita di tipo long, bisogna aggiungere dopo il numero la lettera L maiuscola o minuscola (es. 34L).
Tipo numerico a virgola mobile (floating point) Il tipo floating point coincide con l’insieme dei numeri razionali Q. Java fornisce due tipi floating point: float (precisione semplice) e double (precisione doppia). Vediamoli in dettaglio nella seguente tabella. parola chiave float
spazio occupato 32 bit
double
64 bit
precisione semplice 7 cifre decimali significative doppia 15 cifre decimali significative
caratteristiche imprecisi per numeri troppo piccoli o troppo grandi sui processori moderni i calcoli con i double sono più veloci di quelli che usano float
Osservazioni Solitamente, per i numeri razionali, si utilizza il tipo double, poiché non ci sono vantaggi evidenti nell’uso del tipo float. Le costanti numeriche esplicite con punto decimale (es. 15.347) sono sempre interpretate come double. Per rendere una costante numerica di tipo float, bisogna aggiungere dopo il numero la lettera F maiuscola o minuscola (es. 15.347F).
Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/14
2
Tipo carattere Una variabile di tipo carattere può contenere un carattere in formato Unicode. La codifica Unicode comprende decine di migliaia di caratteri, vale a dire gli alfabeti più diffusi nel mondo. I valori da 0 a 256 corrispondono, per motivi di retrocompatibilità, al set di caratteri ASCII. parola spazio intervallo valori chiave occupato char 16 bit se utilizzati come interi da 0 a 65.535
caratteristiche caratteri UNICODE; i primi 256 caratteri sono quelli del codice ASCII
Una variabile di tipo carattere è, a tutti gli effetti, un intero a 16 bit privo di segno. Nell'effettuare assegnamenti, tuttavia, si preferisce ricorrere alle costanti carattere, racchiudendo un singolo carattere tra apici, come nell'esempio seguente: char carattere = 'a'; Ad ogni carattere del codice ASCII è associato un numero binario, al quale corrisponde un ben determinato numero decimale. La combinazione di tasti ALT+codicedecimale, consente di stampare a video il particolare carattere, ammesso che il carattere sia effettivamente stampabile. Osservate, per esempio, la seguente tabella:
La combinazione ALT+123 permette di ottenere la parentesi graffa aperta, mentre la combinazione ALT+125 restituisce la parentesi graffa chiusa.
Tipo booleano Una variabile booleana può assumere solamente i valori true (vero) e false (falso). Il termine booleano deriva dal nome del matematico e logico britannico George Boole, considerato il fondatore della logica matematica. parola chiave intervallo valori boolean true, false
Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/14
caratteristiche non sono convertibili in numeri
3
Tipo stringa Le stringhe in Java non sono tipi di dati primitivi, ma vengono utilizzate come se lo fossero. Una stringa è una sequenza di caratteri alfanumerici (alfabetici e numerici) di lunghezza qualsiasi (es. il codice fiscale). parola chiave intervallo valori String sequenze di alfanumerici di lunghezza qualsiasi
caratteristiche non sono tipi primitivi ma è come se lo fossero
Il valore di una stringa è sempre racchiuso tra virgolette; per esempio: String str = “saluti”;
_______________________________________________________________________ Quest'opera è stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
Autore: Cinzia Bocchi Ultimo aggiornamento: 20/09/14
4