Non ci sono 2 modi .... solo 1!
codice:public void chiamante() { int[] arr = { 1, 2, 3 }; chiamato(arr); } public void chiamato(int[] interi) { .... }
In chiamante, arr ha un valore, quale esso sia non ha molta importanza (per il programmatore). Quando chiamato viene invocato, viene passata una copia del valore. Ovvero anche il parametro interi ha lo stesso valore contenuto in arr. Ma sono 2 variabili distinte, questo è il senso della "copia". Se assegni un altro reference ad 'interi', non cambi il valore di 'arr' in chiamante.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ok, quindi posso assegnare un altro reference ad "interi" ma se in chiamato() c'è interi[1]=99; modifico anche arr[], ho capito bene?
questo concetto mi risulta un po' ostico perché mi pareva di ricordare che in java ci sono casi in cui quando si passa ad una funzione un oggetto/variabile questo rimane immutato nella funzione chiamante..![]()
Sì, esatto.
Questo riguarda solo il fatto che un oggetto sia "mutabile" oppure no. Dipende da come è fatta la classe. String ad esempio è immutabile ma semplicemente perché non c'è alcun metodo setQualcosa (o altro con qualunque altro nome) che va a modificare lo "stato" dell'oggetto ovvero le sue variabili di istanza.
In sostanza alla fin fine: il metodo/costruttore chiamato ha un reference uguale a quello che ha il chiamante. Non può cambiare le variabili locali nel chiamante ma se l'oggetto è "mutabile" può cambiarne lo stato.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet