Le variabili sono riferimenti.
Quando li passi ad un metodo vengono passati per valore (copia).
Esempio:
in memoria ho 1 oggetto creato con new Object() e 1 riferimento (variabile rif1)codice:Object rif1 = new Object(); ...
ora ho sempre 1 oggetto ma 2 riferimenti ! rif1 e rif2 che puntano allo stesso oggetto, rif2 è visibile nel metodo che sto eseguendo, rif1 no.codice:passaggio(rif1); static void passaggio(Object rif2) { ... }
ora ho creato un altro oggetto, la stringa, a l'ho assegnata a rif2, rif1 non è cambiato!codice:rif2 = "Proviamo così";
Quando esco dal metodo rif2 non è più visibile da nessuno, la stringa non ha più riferimenti validi e verrà fatta fuori dal garbage collector, mi rimane solo rif1 che punta sempre a new Object()
per i primitivi (int, long, char ecc..) il discorso è un pò diverso perchè non sono oggetti.

Rispondi quotando