forse ho capito qual e' il tuo dubbio!
allora, cerkero' di essere kiaro![]()
quando fai un'assegnazionenon agisci sulla variabile;quando fai una dereferenziazione agisci sullo spazio di memoria della variabile.
Esempi (spero) chiarificatori:
String s;
String[] a = new String[2];
assegnazione:
s = "pippo";
ora s punta a uno spazio di memoria in cui c'e' scitto "pippo";
se ora faccio un'altra assegnazione
s = "pluto";
s puntera' ad un'altro spazio di memoria(diverso da quello in cui c'e' scritto "pippo")in cui c'e' scritto "pluto"; lo spazio di memoria a cui puntava prima sara' ripulito dal Garbage Collector se non e' puntato da nessun'altra variabile.
dereferenziazione:
l'array di Stringhe a ha 2 spazi di memoria riservati per lui, uno puntato da a[0] e l'altro da a[1];
quando scrivo
a[0] = "paper";
a[0] continuera' a puntare allo stesso spazio di memoria,in cui ora pero' c'e' scritto "paper";
quindi se ora scrivo
a[0] = "ciao";
a[0] punta sempre allo stesso spazio di memoria e il nuovo valore "ciao" andra' a sovrascrivere il vecchio valore "paper".
nella assegnazione non viene sovrascritto nulla, cambia lo spazio di memoria della variabile.
In altre parole vedila cosi':
immagina la variabile come un puntatore;
con l'assegnazione si sposta il puntatore e lo si fa puntare al valore desiderato , con la dereferenziazione non si sposta il puntatore, ma si cambia il valore a cui punta.
spero di esserti stato di aiuto
![]()