Sobes.tech
Junior

Как се предават параметрите в методите в Java?

sobes.tech AI

Отговор от AI

В Java параметрите в методите се предават по стойност (pass-by-value).

Примитивни типове:

  • Предава се копие на стойността на примитивния тип. Промяната на параметъра вътре в метода не влияе на оригиналната променлива извън него.
// Пример за примитивен тип
public void changeValue(int x) {
    x = x + 10; // Копието на x вътре в метода се променя
}

// Използване:
int original = 5;
changeValue(original);
// original ще остане 5

Обекти (референтни типове):

  • Предава се копие на референцията към обекта. И двете референции (оригиналната и тази в параметъра) сочат към един и същия обект в паметта.
  • Промяната на състоянието на обекта (например, извикване на сетър, модификация на полета) чрез предадената референция вътре в метода ще се отрази на оригиналния обект.
  • Пренасочването на параметъра към нов обект вътре в метода не променя оригиналната референция отвън.
// Пример за референтен тип (обект)
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); // Променя състоянието на оригиналния обект
}

public void reassignObject(MyObject obj) {
    obj = new MyObject(200); // Параметърът сега сочи към нов обект, оригиналната референция не се променя
}

// Използване:
MyObject originalObject = new MyObject(10);
modifyObject(originalObject);
// originalObject сега има стойност 100

MyObject anotherObject = new MyObject(50);
reassignObject(anotherObject);
// anotherObject все още сочи към оригиналния обект със стойност 50

Обобщение: Предава се стойността на референцията (адреса), а не самият обект. Това позволява модифициране на обекта чрез тази референция, но не и промяна на оригиналната референция да сочи към друг обект.