Čo znamená odovzdávanie parametrov hodnotou?
sobes.tech AI
Odpoveď od AI
Prenos parametrov hodnotou znamená, že sa do metódy odovzdáva kópia hodnoty premennej. Akékoľvek zmeny vykonané na parametri vnútri metódy neovplyvnia pôvodnú premennú mimo metódy.
Pre primitívne typy (ako int, float, boolean atď.) sa odovzdáva kópia samotnej hodnoty.
Pre referenčné typy (objekty) sa odovzdáva kópia odkazu na objekt. To znamená, že vo vnútri metódy je možné upraviť objekt, na ktorý odkaz ukazuje (napríklad zmeniť polia objektu), a tieto zmeny budú viditeľné aj mimo metódy, pretože obe odkazy ukazujú na ten istý objekt v pamäti. Ak však odkaz sám priradíme k novému objektu (vytvoríme nový objekt a priradíme ho parametru), pôvodný odkaz mimo metódy zostane nezmenený.
Príklad pre primitívny typ:
public class PassByValueExample {
public static void changeValue(int number) {
number = number + 10; // Kopírujeme hodnotu
// System.out.println("Vo vnútri metódy: " + number); // Pre demonštráciu
}
public static void main(String[] args) {
int x = 5;
changeValue(x);
// System.out.println("Mimo metódy: " + x); // x zostane 5
}
}
Príklad pre referenčný typ:
class MyObject {
int value;
MyObject(int value) {
this.value = value;
}
}
public class PassByValueReferenceExample {
public static void modifyObject(MyObject obj) {
obj.value = obj.value + 10; // Zmeníme pole objektu cez odkaz
}
public static void reassignObject(MyObject obj) {
obj = new MyObject(100); // Priradíme novú referenciu parametru
// System.out.println("Vo vnútri reassignObject: " + obj.value); // Pre demonštráciu
}
public static void main(String[] args) {
MyObject myObj = new MyObject(5);
modifyObject(myObj);
// System.out.println("Po modifyObject: " + myObj.value); // hodnota bude 15
MyObject anotherObj = new MyObject(20);
reassignObject(anotherObj);
// System.out.println("Po reassignObject: " + anotherObj.value); // hodnota zostane 20
}
}