Junior
Jak parametry są przekazywane w metodach w Java?
sobes.tech AI
Odpowiedź od AI
W Javie parametry w metodach są przekazywane przez wartość (pass-by-value).
Typy prymitywne:
- Przekazywana jest kopia wartości prymitywnej. Zmiana parametru wewnątrz metody nie wpływa na oryginalną zmienną poza nią.
// Przykład dla typu prymitywnego
public void changeValue(int x) {
x = x + 10; // Kopia x wewnątrz metody jest modyfikowana
}
// Użycie:
int original = 5;
changeValue(original);
// original pozostanie równe 5
Obiekty (typy referencyjne):
- Przekazywana jest kopia referencji do obiektu. Obie referencje (oryginalna i ta w parametrze metody) wskazują na ten sam obiekt w pamięci.
- Modyfikacja stanu obiektu (np. wywołanie settera, modyfikacja pól) przez przekazaną referencję wewnątrz metody wpłynie na oryginalny obiekt.
- Przypisanie parametru do nowego obiektu wewnątrz metody nie zmieni oryginalnej referencji na zewnątrz.
// Przykład dla typu referencyjnego (obiekt)
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); // Zmienia stan oryginalnego obiektu
}
public void reassignObject(MyObject obj) {
obj = new MyObject(200); // Parametr obj teraz wskazuje na nowy obiekt, oryginalna referencja się nie zmienia
}
// Użycie:
MyObject originalObject = new MyObject(10);
modifyObject(originalObject);
// originalObject ma teraz wartość 100
MyObject anotherObject = new MyObject(50);
reassignObject(anotherObject);
// anotherObject nadal wskazuje na oryginalny obiekt z wartością 50
Podsumowując: przekazywana jest wartość referencji (adres), a nie sam obiekt. To umożliwia modyfikację obiektu przez tę referencję, ale nie zmianę oryginalnej referencji na inny obiekt.