Tipi di variabili Java
Il fatto che in Java oltre agli oggetti esistano anche dati primitivi comporta
che esistano di fatto due tipi di variabili:variabili collegate a oggetti
e variabili collegate a tipi primitivi. Questi due tipi di variabili hanno
comportamenti diversi che bisogna conoscere per poter interpretare correttamente
il funzionamento del programma.
Una variabile che si riferisca a un dato primitivo permette di trattare
direttamente il valore del dato, mentre una variabile che si
riferisce a un oggetto e' solo un puntatore alla zona di memoria
dove si trova l'oggetto.(Per evitare confusione coi puntatori del C++
si preferisce usare spesso la parola riferimento oppure handle
(in italiano manico)). Percio' l'effetto della dichiarazione:
int i;
Moto a;
e' completamente diversa nei due casi:
- viene allocata una zona di memoria e viene caricato l'intero 0.
- dopo la dichiarazione l'oggetto Moto ancora non esiste ed ha il valore
null
cioe' il cosidetto puntatore a terra.
Vediamo un altro pezzo di codice con comportamenti diversi nei due casi:
int i=1;
int j=2;
j=i;
String a = "Milano";
String b = "Torino";
b = a;
-
Dopo l'esecuzione del codice in memoria esistono 2 interi ed ambedue hanno valore 1.
- Dopo l'esecuzione del codice in memoria esiste un solo oggetto: la stringa "Milano" e sia a che b puntano ad esso.
Ecco un altro caso:
if (a == b)
-
Se a e b sono dati primitivi l'istruzione controlla se il valore di a e' uguale al valore di b
- Se a e b sono 2 oggetti, l'istruzione controlla se le 2 variabili puntano
allo stesso oggetto.Per controllare se 2 oggetti sono uguali bisogna usare
un apposito metodo e non serve l'operatore ==
Volendo entrare nei dettagli di come Java tratta i due tipi di variabili,
allora bisognerebbe considerare il fatto che la memoria usata per
contenere il valore delle stesse, e' completamente diversa.
I tipi primitivi sono allocati in una zona di memoria detta stack, gli
oggetti in un'altra zona detta heap.Questo meccanismo di allocazione
nello stack o nell'heap e' preso direttamente dal C++ che pero' permette di allocare anche dati primitivi nell'heap oppure oggetti nello stack rendendo il tutto molto piu' complicato.
Maintained by Giuseppe Zito
Ultimo aggiornamento: