Как се предават променливите към методите?
sobes.tech AI
Отговор от AI
В Java променливите се предават към методите по стойност.
Това означава, че при извикване на метод се създава копие на стойността на променливата, и именно това копие се предава на метода. Промените, направени върху параметъра вътре в метода, засягат само това копие и не засягат оригиналната променлива.
За примитивните типове данни (int, float, boolean и т.н.) се предава директната стойност.
// Примитивен тип данни
int a = 10;
void changeValue(int x) {
x = 20; // Копието се променя, не оригиналната променлива 'a'
}
changeValue(a);
// След извикването на метода, 'a' все още е 10
За референтните типове данни (обекти, масиви) се предава копие на референцията към обекта. Самата референция се копира, но и двете референции сочат към един и същи обект в паметта. Промените в състоянието на обекта, направени вътре в метода чрез предадената референция, ще бъдат видими отвън. Въпреки това, преназначаването на референцията вътре в метода няма да повлияе на оригиналната референция.
// Референтен тип
class MyObject {
int value;
}
MyObject obj = new MyObject();
obj.value = 10;
void changeObjectValue(MyObject o) {
o.value = 20; // Променя състоянието на обекта, видимо отвън
}
void reassignObject(MyObject o) {
o = new MyObject(); // Преназначава локалната референция, не влияе на 'obj'
o.value = 30;
}
changeObjectValue(obj);
// След извикването, obj.value е 20
reassignObject(obj);
// След извикването, 'obj' все още сочи към същия обект, и obj.value е 20
// Новият MyObject, създаден вътре в reassignObject, не е достъпен отвън
Обобщено, Java винаги използва предаване по стойност, но за референтните типове се копира стойността на референцията, а не самият обект.