|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: May 2015
Messaggi: 26
|
[JAVA] Memoria
Salve, su un libro è riportata una cosa che non ho capito, questa:
Consideriamo il seguente frammento di codice: Codice HTML:
double unNumero = 5.0; double unAltroNumero = unNumero; Data unGiorno = new Data(); Data unAltroGiorno = unGiorno; 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 ? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
E' curioso il fatto che in genere tutti si chiedono il contrario di quello che chiedi tu
![]() 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. |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: May 2015
Messaggi: 26
|
Ottima spiegazione, grazie.
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:05.