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