Sobes.tech
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.