Sobes.tech
Junior

Hogyan kerülnek átadásra a változók a módszerekbe?

sobes.tech MI

Válasz az MI-től

Java-ban a változókat értékkel adjuk át a metódusoknak.

Ez azt jelenti, hogy amikor egy metódust hívunk, akkor a változó értékének másolata jön létre, és ez a másolat kerül átadásra a metódusnak. A paraméteren belüli változtatások csak erre a másolatra hatnak, és nem érintik az eredeti változót.

A primitív típusok (int, float, boolean stb.) közvetlen értékkel kerülnek átadásra.

// Primitív típus
int a = 10;

void changeValue(int x) {
  x = 20; // A másolat módosul, nem az eredeti változó 'a'
}

changeValue(a);
// A metódus hívása után az 'a' továbbra is 10

A referenciatípusok (objektumok, tömbök) esetén a referencia másolata kerül átadásra. Maga a referencia másolódik, de mindkét referencia ugyanarra az objektumra mutat a memóriában. A metóduson belüli változtatások az objektum állapotán, a referencia által, láthatóak kívülről is. Azonban a referencia újra hozzárendelése a metóduson belül nem befolyásolja az eredeti referenciát.

// Referenciatípus
class MyObject {
    int value;
}

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

void changeObjectValue(MyObject o) {
  o.value = 20; // Az objektum állapotának módosítása, kívülről látható
}

void reassignObject(MyObject o) {
  o = new MyObject(); // A helyi referencia újra hozzárendelése, nem befolyásolja az 'obj'-t
  o.value = 30;
}

changeObjectValue(obj);
// A metódus hívása után az obj.value 20

reassignObject(obj);
// A metódus hívása után az 'obj' továbbra is ugyanarra az objektumra mutat, és az obj.value 20
// Az új MyObject, amit a reassignObject-ben hoztak létre, kívülről nem elérhető

Összefoglalva, Java mindig érték szerinti átadást használ, de referenciatípusok esetén a referencia értékének másolata kerül átadásra, nem maga az objektum.