Come vengono passate le variabili ai metodi?
sobes.tech AI
Risposta dell'AI
In Java, le variabili vengono passate ai metodi per valore.
Ciò significa che, quando si chiama un metodo, viene creata una copia del valore della variabile, e questa copia viene passata al metodo. Le modifiche apportate al parametro all'interno del metodo influenzano solo questa copia e non la variabile originale.
Per i tipi di dato primitivi (int, float, boolean, ecc.) viene passato il valore diretto.
// Tipo di dato primitivo
int a = 10;
void changeValue(int x) {
x = 20; // Si modifica la copia, non la variabile originale 'a'
}
changeValue(a);
// Dopo la chiamata al metodo, 'a' rimane 10
Per i tipi di dato referenziati (oggetti, array), viene passata una copia del riferimento all'oggetto. Il riferimento stesso viene copiato, ma entrambi i riferimenti puntano allo stesso oggetto in memoria. Le modifiche allo stato dell'oggetto, fatte all'interno del metodo tramite il riferimento passato, saranno visibili all'esterno. Tuttavia, riassegnare il riferimento all'interno del metodo non influirà sul riferimento originale.
// Tipo di dato referenziato
class MyObject {
int value;
}
MyObject obj = new MyObject();
obj.value = 10;
void changeObjectValue(MyObject o) {
o.value = 20; // Cambia lo stato dell'oggetto, visibile dall'esterno
}
void reassignObject(MyObject o) {
o = new MyObject(); // Riassegna il riferimento locale, non influisce su 'obj'
o.value = 30;
}
changeObjectValue(obj);
// Dopo la chiamata, obj.value è 20
reassignObject(obj);
// Dopo la chiamata, 'obj' punta ancora allo stesso oggetto, e obj.value è 20
// Il nuovo MyObject creato dentro reassignObject non è accessibile dall'esterno
Pertanto, Java utilizza sempre il passaggio per valore, ma per i tipi di dato referenziati, viene copiata il valore del riferimento, non l'oggetto stesso.