I Tipi di Dato in Java

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.

I Dati di Tipo Primitivo

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>

Portabilità