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.