PDA

View Full Version : [JAVA] Memoria


marcoqwertyuiop
03-06-2015, 19:25
Salve, su un libro è riportata una cosa che non ho capito, questa:

Consideriamo il seguente frammento di codice:
double unNumero = 5.0;
double unAltroNumero = unNumero;
Data unGiorno = new Data();
Data unAltroGiorno = unGiorno;

La variabile unAltroNumero assumerà lo stesso valore della variabile unNumero ma le due variabili rimarranno indipendenti l'una dall'altra.
Il valore della variabile unNumero verrà infatti copiato nella variabile unAltroNumero. Se il valore di una delle due variabili sarà modificato in seguito, il valore dell'altra variabile non cambierà.


Cioè se cambio il valore a double unNumero = 3.5, non cambia anche il valore di unAltroNumero ?

wingman87
03-06-2015, 20:26
E' curioso il fatto che in genere tutti si chiedono il contrario di quello che chiedi tu :D (cioè perché modificando unGiorno cambia anche unAltroGiorno)

No, unAltroNumero non cambia, perché nelle locazioni di memoria in cui vengono memorizzate le variabili di tipo primitivo viene memorizzato il valore (5.0 nel tuo caso).
Quindi, quando effettui un'assegnazione ad una variabile di tipo primitivo, quello che avviene (in generale) è che viene calcolato il valore della parte destra dell'espressione di assegnazione e poi quel valore viene messo nella locazione di memoria dedicata alla variabile nella parte sinistra dell'assegnazione.

Di fatto se scrivi
unAltroNumero = unNumero
il valore di unNumero viene copiato in unAltroNumero

Per le variabili di tipo non primitivo il discorso è diverso perché nella locazione di memoria ad esse dedicate non viene memorizzato il "valore" (che sarebbe un oggetto) bensì un riferimento a esso (o null).

Quindi quando scrivi
unAltroGiorno = unGiorno
avviene la stessa cosa di cui sopra ma unGiorno contiene un riferimento a un oggetto e copiando questo valore in unAltroGiorno quello che succede è che entrambe le variabili faranno riferimento allo stesso oggetto.

marcoqwertyuiop
03-06-2015, 21:04
Ottima spiegazione, grazie.