Sobes.tech
Junior

Как се предават променливите към методите?

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 винаги използва предаване по стойност, но за референтните типове се копира стойността на референцията, а не самият обект.