Sobes.tech
Junior

Ako sa premenné odovzdávajú do metód?

sobes.tech AI

Odpoveď od AI

V Jave sa premenné prenášajú do metód hodnotou.

To znamená, že pri volaní metódy sa vytvorí kópia hodnoty premennej a táto kópia sa odovzdá do metódy. Zmeny vykonané na parametri vnútri metódy ovplyvnia iba túto kópiu a ne dotýkajú sa pôvodnej premennej.

Pre primitívne dátové typy (int, float, boolean atď.) sa odovzdáva priama hodnota.

// Primitívny dátový typ
int a = 10;

void changeValue(int x) {
  x = 20; // Kópia sa zmení, nie pôvodná premenná 'a'
}

changeValue(a);
// Po volaní metódy zostáva 'a' stále 10

Pre referenčné typy (objekty, polia) sa odovzdáva kópia odkazu na objekt. Samotný odkaz sa kopíruje, ale obe referencie ukazujú na ten istý objekt v pamäti. Zmeny stavu objektu vykonané vnútri metódy cez odkaz budú viditeľné zvonku. Avšak prepisovanie odkazu vnútri metódy neovplyvní pôvodný odkaz.

// Referenčný typ
class MyObject {
    int value;
}

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

void changeObjectValue(MyObject o) {
  o.value = 20; // Mění stav objektu, viditeľné zvonku
}

void reassignObject(MyObject o) {
  o = new MyObject(); // Prepisuje lokálny odkaz, neovplyvní 'obj'
  o.value = 30;
}

changeObjectValue(obj);
// Po volaní je obj.value 20

reassignObject(obj);
// Po volaní stále odkazuje na ten istý objekt, a obj.value je 20
// Nový MyObject vytvorený v reassignObject nie je dostupný zvonku

Zhrnutie: Java vždy používa odovzdanie hodnotou, ale pre referenčné typy sa kopíruje hodnota odkazu, nie samotný objekt.