Sobes.tech
Junior

Kuidas edastatakse muutujad meetoditesse?

sobes.tech AI

Vastus AI-lt

Java kasutab väärtuse edastamist meetoditele.

See tähendab, et meetodi kutsumisel luuakse väärtuse koopia ning just see koopia edastatakse meetodile. Muudatused, mis tehakse parameetris meetodis, mõjutavad ainult seda koopiat ega puuduta algset muutujat.

Primitiivset tüüpi andmetel (int, float, boolean jne) edastatakse otseväärtus.

// Primitiivne andmetüüp
int a = 10;

void changeValue(int x) {
  x = 20; // Muudab koopiat, mitte algset muutujat 'a'
}

changeValue(a);
// Pärast meetodi väljakutset on 'a' endiselt 10

Viidatavate andmetüüpide (objektid, massiivid) puhul edastatakse objekti viite koopiat. Viide ise kopeeritakse, kuid mõlemad viited osutavad samale objektile mälus. Muudatused objekti olekus, mis tehakse meetodis antud viite kaudu, on nähtavad väljaspool meetodit. Kuid viite ümbermääramine meetodis ei mõjuta algset viidet.

// Viidatüüpi andmetüüp
class MyObject {
    int value;
}

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

void changeObjectValue(MyObject o) {
  o.value = 20; // Muudab objekti olekut, nähtav väljastpoolt
}

void reassignObject(MyObject o) {
  o = new MyObject(); // Uuendab lokaalse viite, ei mõjuta algset 'obj'
  o.value = 30;
}

changeObjectValue(obj);
// Pärast meetodi väljakutset on obj.value 20

reassignObject(obj);
// Pärast meetodi väljakutset viitab obj endiselt samale objektile, obj.value on 20
// Uus MyObject, mille loodud reassignObject sees, ei ole väljastpoolt kättesaadav

Seega kasutab Java alati väärtuse edastust, kuid viidetega andmetüüpide puhul kopeeritakse viite väärtus, mitte objekt ise.