Tipi in Java

Contenuto1 Cos’è un Tipo in Java?2 Tipi Primitivi in Java2.1 byte2.2 short2.3 int2.4 long2.5 float2.6 double2.7 boolean2.8 char3 Literals in Java3.1 Numeri interi3.2 Numeri NON interi3.3 Caratteri3.4 Stringhe e Numeri […]

Avatar di gbfactory
gbfactory 1 Novembre 2020

Come abbiamo già accennato nella sezione precedente, Java è un linguaggio a tipizzazione statica. Un linguaggio è a tipizzazione statica se il tipo di una variabile è noto quando il codice viene compilato, quindi dobbiamo necessariamente specificare il tipo della variabile e dichiararla prima di poterla utilizzare.

Cos'è un Tipo in Java?

In Java un tipo di un dato è l'insieme di caratteristiche che definisce i valori che una variabile potrà assumere, per esempio, se una variabile ha il tipo int, potrà assumere solo numeri interi come valore.

In Java ci sono due categorie di tipi: i tipi Primitivi e i tipi Non Primitivi, come per esempio gli Arrays e le Stringhe, ma di questo ne parleremo più avanti. Ora ci concentreremo sui tipi primitivi.

Tipi Primitivi in Java

In Java ci sono otto tipi primitivi pensati per rappresentare un certo tipo di dati occupando un certo spazio in memoria.

Questi tipi sono inclusi nel linguaggio per mantenere la portabilità di Java dato che la dimensione di questi tipi primitivi non cambia in base al sistema operativo.

byte

Il tipo byte può contenere numeri interi con segno compresi tra -128 e 127. Questo tipo è utilizzato principalmente per salvare memoria in grandi array, soprattutto al posto del tipo int, dato che è quattro volte più piccolo.

Dimensione predefinita: 8 bit (1 byte)
Valore predefinito: 0

byte numero = 83;

short

Il tipo short può contenere numeri interi con segno compresi tra -32.768 e 32.767. Anch'esso è utilizzato principalmente per salvare spazio.

Dimensione predefinita: 16 bit (2 byte)
Valore predefinito: 0

short numero = 38465;

int

Il tipo int può contenere numeri interi con segno compresi tra -2,147,483,648 e 2,147,483,647. Generalmente questo è il tipo utilizzato per i valori interi a meno che non ci siano preoccupazioni rigardo la memoria.

Dimensione predefinita: 32 bit (4 byte)
Valore predefinito: 0

int numero = 10000000;

long

Il tipo long può contenere numeri interi con segno compresi tra -9,223,372,036,854,775,808 e 9,223,372,036,854,775,807. Questo tipo sostituisce l'int quando è richiesto un maggiore range di numeri.

Dimensione predefinita: 64 bit (8 byte)
Valore predefinito: 0L

int numero = 38423L;

float

Il tipo float può contenere numeri in virgola mobile a precisione singola. Viene utilizzato principalmente per risparmiare memoria in grandi array di numeri con la virgola. Il tipo float non dovrebbe mai essere utilizzato per valori precisi, come può essere la valuta.

Dimensione predefinita: 32 bit (4 byte)
Valore predefinito: 0.0f

float numero = 283.4f;

double

Il tipo double può contenere numeri in virgola mobile a doppia precisione. Questo è il tipo che generalmente viene utilizzato per i valori decimali. Non dovrebbe mai essere utilizzato per valori precisi, come la valuta.

Dimensione predefinita: 64 bit (8 byte)
Valore predefinito: 0.0d

double numero = 123,4d;

boolean

Il tipo boolean è utilizzato per rappresentare 1 bit di informazione, quindi ci sono solamente due valori possibili: true e false (vero e falso). Questo tipo è utilizato per salvare semplici flags che possono avere due condizioni.

Dimensione predefinita: non specificato, basta 1 bit
Valore predefinito: false

boolean acceso = true;

char

Il tipo char può contenere un singolo carattere del charset Unicode compreso tra \u0000 e \uffff.

Dimensione predefinita: 16 bit (2 byte)
Valore predefinito: \u0000

char carattere = 'G';

Literals in Java

In Java un literal è la rappresentazione nel codice sorgente di un valore fisso. Sono rappresentati direttamente nel codice senza alcuna computazione.

I literals possono essere assegnati ad ogni variabile con un tipo primitivo:

int num = 3;

Numeri interi

I valori per i tipi byte, short, int e long possono essere espressi come interi in vari sistemi di numerazione: decimale (base 10), esadecimale (base 16) od ottale (base 8). Questo utilizzando gli appositi prefissi:

int base10 = 3;    // Base 10 - nessun prefisso
int base16 = 0x64; // Base 16 - prefisso 0x
int base8  = 0144; // Base 8  - prefisso 0

Numeri NON interi

Per esprimere i valori long si utilizza invece il suffisso L (è valida anche la versione minuscola del carattere ma sconsigliata a causa della scarsa leggibilità).

Per i valori di tipo non intero, è possibile seprarare la parte decimale con il simbolo . (punto) e saranno considerati di tipo double a meno che non si utilizzi il suffisso F (o f), per indicare il tipo float.

Per il tipo double si può utilizzare il suffisso D (o d) per motivi di leggibilità, anche se non è ritenuto necessario.

È consentito l'utilizzo della notazione scientifica per i numeri in virgola mobile. Consiste nell'utilizzo della lettera E (o e) seguita da un numero che esprime la potenza di 10 per cui moltiplicare il numero presente prima della lettera.

double es1 = 1000.0; // 1000
double es2 = 1.0E3;  // 1000 in notazione scientifica 

Caratteri

I caratteri possono essere espressi per mezzo del simbolo Unicode oppure utilizzando il codice escape. In entrambe i casi vanno racchiusi tra apici singoli e non doppi.

char eAccentataSymbol = 'è';
char eAccentataEscape = '\u00e8';

È possibile utilizzare anche alcune speciali combinazioni di caratteri dette sequenze di escape, costituite da una barra rovesciata seguita da una lettera o da una combinazione di cifre.

EscapeCarattere
\nNew line (nuova linea)
\rCarriage return (ritorno del carrello)
\fForm feed (fine pagina / nuova pagina)
\bBackspace (indietro)
\sSpace (spazio)
\tTab
\"Apice doppio
\'Apice singolo
\\Backslash (barra rovesciata)
\dddCarattere in ottale
\uxxxxCarattere Unicode esadecimale

Stringhe e Numeri

In Java, oltre agli otto tipi primitivi che abbiamo appena visto, sono presenti anche tipi di dato speciali, detti Simple Data Objects, tra cui troviamo String e Number. Questi sono necessari quando c'è l'esigenza di utilizzare un oggetto al posto di un tipo, ma questa differenza la approfondiremo nelle prossime sezioni.

Le String (stringhe) sono sequenze di char (caratteri) e possono essere dichiarate utilizzando i doppi apici (virgolette):

String prova = "Questa è una stringa di prova";

Invece i tipi Byte, Short, Intger, Long, Float e Double sono le controparti dei medesimi primitivi, solamente scritti con la prima lettera maiuscola. Questi vengono dichiarati come i loro corrispettivi primitivi ma di default vengono inizializzati al literal null (nullo) se non assegnamo un valore.