Sobes.tech
Junior

Kaip kintamieji perduodami į metodus?

sobes.tech AI

Atsakymas iš AI

Java kalbant, kintamieji perduodami metodams pagal reikšmę.

Tai reiškia, kad kviečiant metodą, sukuriama kopija kintamojo reikšmės, ir ši kopija perduodama metodui. Pakeitimai, padaryti parametre viduje, veikia tik tą kopiją ir nepaliečia originalios kintamojo.

Primitives (int, float, boolean ir kt.) perduodami tiesiogiai.

// Primitives tipas
int a = 10;

void changeValue(int x) {
  x = 20; // Kopija keičiasi, ne originali 'a'
}

changeValue(a);
// Po metodo iškvietimo, 'a' vis dar yra 10

Referenciniai tipai (objektai, masyvai) perduodami kaip kopija nuorodos į objektą. Nuoroda kopijuojama, bet abi nuorodos rodo į tą patį objektą atmintyje. Pakeitimai objekto būsenos, atliekami metodo viduje per perduotą nuorodą, bus matomi išorėje. Tačiau nuorodos perrašymas metodo viduje nepaveiks originalios nuorodos.

// Nuorodos tipas
class MyObject {
    int value;
}

MyObject obj = new MyObject();
obj.value = 10;

void changeObjectValue(MyObject o) {
  o.value = 20; // Keičia objekto būseną, matoma išorėje
}

void reassignObject(MyObject o) {
  o = new MyObject(); // Vietinis nuorodos perrašymas, nepaveikia 'obj'
  o.value = 30;
}

changeObjectValue(obj);
// Po iškvietimo, obj.value yra 20

reassignObject(obj);
// Po iškvietimo, 'obj' vis dar rodo į tą patį objektą, ir obj.value yra 20
// Naujas MyObject, sukurtas reassignObject, nėra pasiekiamas išorėje

Apibendrinant, Java visada naudoja perdavimą pagal reikšmę, bet referencinių tipų atveju, kopijuojama nuorodos reikšmė, o ne pats objektas.