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:
  1. viene allocata una zona di memoria e viene caricato l'intero 0.
  2. 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;
  1. Dopo l'esecuzione del codice in memoria esistono 2 interi ed ambedue hanno valore 1.
  2. 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)
  1. Se a e b sono dati primitivi l'istruzione controlla se il valore di a e' uguale al valore di b
  2. 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: