Sobes.tech
Junior

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
    }
}