Tipi di dato in Java

Il termine tipo di dato indica l'insieme dei valori che una variabile può assumere, ossia che possono essere memorizzati nell'area di memoria individuata dalla variabile. In altri termini rappresenta il dominio della variabile.
In Java i tipi di dato si distinguono in:

  • primitivi: sono tipi di dato messi a disposizione nativamente dal linguaggio stesso e sono raggruppati in tre categorie:
    • numerici: si tratta di valori numerici di tipo intero o decimale
    • carattere: si tratta dei caratteri Unicode
    • booleani: si tratta dei valori vero/falso (true/false)
  • riferimento: sono gli array e le classi (li approfondiremo meglio nelle sezioni apposite (array e programmazione Object Oriented); gli array sono disponibili nativamente nel linguaggio Java, le classi richiedono il collegamento a delle librerie specifiche in cui queste sono definite
Possiamo riassumere graficamente come illustrato nella figura seguente:

Tipi di dato in Java

Nota:
Una delle principali differenze tra un tipo primitivo ed un tipo riferimento è il modo in cui devono essere confrontati due valori. Per i tipi primitivi è possibile utilizzare l'operatore uguale (=), per i tipi riferimento occorre, invece, utilizzare funzionalità specifiche del tipo stesso che affronteremo meglio con gli argomenti che seguono.

Tipi primitivi in Java

Abbiamo in precednza raggruppato i tipi primitivi in Java in tre categorie:

  • numerici
  • carattere
  • booleani
Analizziamoli ora nel dettaglio.

I tipi numerici possono essere:
  • interi, ossia numeri senza cifre decimali. Questi numeri si possono rappresentare in Java con i tipi che seguono:
    • int, ossia numeri interi a 32 bit, che possono rappresentare valori compresi nell'intervallo
      -232-1 ... 232-1-1

      ossia nell'intervallo
      -2.147.483.648 ... 2.147.483.647
    • long, ossia numeri interi a 64 bit, che possono rappresentare valori compresi nell'intervallo
      -264-1 ... 264-1-1

      ossia nell'intervallo
      -9.223.372.036.854.775.808 ... 9.223.372.036.854.775.807
    • short, ossia numeri interi a 16 bit, che possono rappresentare valori compresi nell'intervallo
      -216-1 ... 216-1-1

      ossia nell'intervallo
      -32.768 ... 32.767
    • byte, ossia numeri interi a 8 bit, che possono rappresentare valori compresi nell'intervallo
      -28-1 ... 28-1-1

      ossia nell'intervallo
      -128 ... 127
  • decimali, ossia numeri con cifre decimali dopo la virgola. Questi numeri si possono rappresentare in Java con i tipi che seguono:
    • float, ossia numeri decimali in virgola mobile a 32 bit
    • double, ossia numeri decimali in virgola mobile a 64 bit
Il tipo carattere occupa 16 bit e può rappresentare 216, ossia 65536 caratteri, ossia tutte i caratteri usati negli alfabeti occidentali, ma anche gli ideogrammi e segni propri delle altre lingue

Alcuni caratteri non sono stampabili, oppure hanno un significato speciale in alcuni linguaggi di programmazione. Per questa ragione si rappresentano con una sequenza speciale di caratteri oppure anteponendo il carattere \ (backslash) al carattere stesso. Queste sequenze speciali prendono il nome di sequenze di escape. Le più comuni sono:
  • \n che indica un avanzameneto di riga
  • \r che indica un ritorno ad inizio riga, senza avanzamento della riga
  • \t che indica una tabulazione, ossia uno spazio di dimensione maggiore
  • \\ che indica un carattere backslash
  • \" che indica il carattere virgolette doppie
  • \' che indica il carattere singola virgoletta
Questi caratteri possono essere usati, al pari degli altri, per comporre del testo da visualizzare all'utente, in un programma Java.

Il tipo boolean occupa 1 bit e può rappresentare 2 valori, ossia 0/1 oppure false/true

Il tipo String

Il linguaggio Java non dispone di un tipo primitivo per la rappresentazione delle sequenze alfanumeriche, ossia delle stringhe di caratteri.
Per tale ragione è stato realizzato il tipo String (riferimento), che permette di lavorare con le sequenze alfanumeriche.
La prima importante conseguenza di questa rappresentazione è che due stringhe non possono essere confrontate con il classico operatore di uguaglianza (==), ma occorre utilizzare una funzionalità specifica del tipo String che si chiama equals.
Più specificatamente, per confrontare due stringhe bisogna utilizzare il codice sottostante:

// se s1 ed s2 sono due variabili di tipo String
// per verificare che i valori contenuti 
// siano uguali, occorre utilizzare la sintassi

s1.equals(s2)

// che restituisce vero se le due sequenze 
// alfanumeriche s1 ed s2 sono identiche
Inoltre, gli oggetti del tipo String di Java sono immutabili, ossia il loro valore non può essere modificato.
Questo implica la necessità di distruggere il vecchio valore e creare un nuovo oggetto, ogni volta che si vuole modificare il contenuto di una variabile di questo tipo.