Junior
151
Come vengono passati i parametri nei metodi in Java?
Risposta dell'AI
sobes.tech AI
In Java, i parametri dei metodi vengono passati per valore (pass-by-value).
Tipi primitivi:
- Viene passata una copia del valore primitivo. Modificare il parametro all'interno del metodo non influisce sulla variabile originale esternamente.
// Esempio per tipo primitivo
public void changeValue(int x) {
x = x + 10; // La copia di x all'interno del metodo viene modificata
}
// Uso:
int original = 5;
changeValue(original);
// original rimarrà 5
Oggetti (tipi di riferimento):
- Viene passata una copia del riferimento all'oggetto. Entrambi i riferimenti (quello originale e quello nel parametro del metodo) puntano allo stesso oggetto in memoria.
- Modificare lo stato dell'oggetto (ad esempio, chiamare un setter, modificare campi) tramite il riferimento passato all'interno del metodo influirà sull'oggetto originale.
- Riassegnare il parametro a un nuovo oggetto all'interno del metodo non cambierà il riferimento originale esternamente.
// Esempio per tipo di riferimento (oggetto)
public class MyObject {
private int value;
public MyObject(int value) {
this.value = value;
}
public void setValue(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
public void modifyObject(MyObject obj) {
obj.setValue(100); // Cambia lo stato dell'oggetto originale
}
public void reassignObject(MyObject obj) {
obj = new MyObject(200); // Il parametro obj ora punta a un nuovo oggetto, la referenza originale non cambia
}
// Uso:
MyObject originalObject = new MyObject(10);
modifyObject(originalObject);
// originalObject ora ha value = 100
MyObject anotherObject = new MyObject(50);
reassignObject(anotherObject);
// anotherObject ancora punta all'oggetto con value = 50
In breve: viene passato il valore della referenza (il suo indirizzo), non l'oggetto stesso. Questo permette di modificare l'oggetto tramite questa referenza, ma non di cambiare la referenza originale a un altro oggetto.