Mit jelent a paraméterek érték szerinti átadása?
sobes.tech MI
Válasz az MI-től
Az érték szerinti paraméterátadás azt jelenti, hogy a változó értékének másolatát adjuk át a metódusnak. Bármilyen változtatás, amit a paraméteren belül a metódusban végzünk, nem befolyásolja a metóduson kívüli eredeti változót.
Az alapvető típusokhoz (például int, float, boolean stb.) - a saját érték másolatát adjuk át.
A hivatkozási típusokhoz (objektumokhoz) - a hivatkozás másolatát adjuk át az objektumra. Ez azt jelenti, hogy a metóduson belül módosíthatjuk a hivatkozás által mutatott objektumot (például az objektum mezőit módosíthatjuk), és ezek a módosítások láthatók lesznek a metóduson kívül is, mivel mindkét hivatkozás ugyanarra az objektumra mutat a memóriában. Azonban, ha a hivatkozást maga egy új objektumra állítjuk (új objektumot hozunk létre és hozzárendeljük a paraméterhez), akkor a metóduson kívüli eredeti hivatkozás változatlan marad.
Példa primitív típusra:
public class PassByValueExample {
public static void changeValue(int number) {
number = number + 10; // A másolat értékét módosítjuk
// System.out.println("Metódus belseje: " + number); // Demonstrációhoz
}
public static void main(String[] args) {
int x = 5;
changeValue(x);
// System.out.println("Metódus kívül: " + x); // x változatlan marad, 5
}
}
Példa referencia típusra:
class MyObject {
int value;
MyObject(int value) {
this.value = value;
}
}
public class PassByValueReferenceExample {
public static void modifyObject(MyObject obj) {
obj.value = obj.value + 10; // Az objektum mezőjének módosítása referencia által
}
public static void reassignObject(MyObject obj) {
obj = new MyObject(100); // Új referencia hozzárendelése a paraméterhez
// System.out.println("ReassignObject belseje: " + obj.value); // Demonstrációhoz
}
public static void main(String[] args) {
MyObject myObj = new MyObject(5);
modifyObject(myObj);
// System.out.println("modifyObject után: " + myObj.value); // az érték 15 lesz
MyObject anotherObj = new MyObject(20);
reassignObject(anotherObj);
// System.out.println("reassignObject után: " + anotherObj.value); // az érték 20 marad
}
}