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.