In Java, i dati che possono essere utilizzati sono suddivisi in tipi primitivi e tipi complessi.
I tipi primitivi rappresentano i dati di base come numeri, caratteri e valori booleani.
I tipi complessi vengono invece costruiti a partire dai primitivi per rappresentare strutture di dati più articolate, omogenee dal punto di visto logico e/o matematico.
Questi ultimi, in Java, sono basati su classi e oggetti, e permettono di gestire stringhe, array e classi personalizzate.
I dati di tipo complesso sono inoltre detti di riferimento (reference types) siccome una variabile di questo tipo non contiene direttamente il suo valore, bensì una referenza all’area di memoria dove l’oggetto è stato istanziato.
In Java, ogni tipo primitivo ha le seguenti caratteristiche:
I tipi di dato primitivi disponibili in Java:
| Tipo | Dimensione | Descrizione | Range Valori | Valore di default |
|---|---|---|---|---|
| boolean | 1 byte ² | Valore true / false | true, false |
false |
| byte | 1 byte | Numero intero con segno a 8 bit | [-128, +127] | 0 |
| char | 2 byte | Carattere Unicode (UTF‑16) | [0, +65,535] | 0 ('\\\\\\\\u0000') |
| short | 2 byte | Numero intero con segno a 16 bit | [-32,768, +32,767] | 0 |
| int | 4 byte | Numero intero con segno a 32 bit | [-2,147,483,648, +2,147,483,647] | 0 |
| long | 8 byte | Numero intero con segno a 64 bit | [-9,223,372,036,854,775,808, +9,223,372,036,854,775,807] | 0L |
| float ³ | 4 byte | Numero in virgola mobile a precisione singola | circa ±1.4 × 10⁻⁴⁵ … ±3.4 × 10³⁸, ~6–7 cifre decimali | 0.0f |
| double | 8 byte | Numero in virgola mobile a precisione doppia | circa ±4.9 × 10⁻³²⁴ … ±1.8 × 10³⁰⁸, ~15 cifre decimali | 0.0d |
<aside> ✅
Nota ¹: alle variabili locali (cioè quelle dichiarate all'interno di un metodo, come main) non viene assegnato un valore di default e devono quindi essere inizializzate esplicitamente prima dell'uso. Se provi a utilizzarle senza assegnare un valore, il compilatore restituirà un errore. Al contrario, le variabili d’istanza (dichiarate a livello di classe) e le variabili statiche ricevono automaticamente un valore di default.
</aside>
<aside> ↔️
Nota ²: la dimensione del tipo boolean non è stabilita in modo preciso dalla JVM. In genere occupa 1 byte, ma questo può variare a seconda dell’implementazione data dal compilatore.
</aside>
<aside> 🔢
Nota ³: anche se il tipo float è pienamente supportato in Java, oggi è spesso considerato desueto per molte applicazioni, soprattutto a causa della sua precisione limitata (~6-7 cifre decimali significative). Per calcoli numerici più precisi e affidabili, soprattutto in ambito scientifico o finanziario, si preferisce generalmente utilizzare il tipo double, il quale offre una precisione maggiore (~15 cifre decimali significative). Inoltre, la maggior parte delle libraries scritte in Java restituiscono un risultato di tipo double se devono eseguire calcoli a virgola mobile.
Nelle moderne architetture hardware, la differenza di performance tra float e double è spesso trascurabile, riducendo ulteriormente l’utilizzo del float.
</aside>