Hirdetés

Keresés

Új hozzászólás Aktív témák

  • robisz

    senior tag

    válasz Inv1sus #1467 üzenetére

    Halihó!

    Na akkor a tisztánlátás kedvéért: Java-ban ugye vannak a primitív tipusok (kisbetűs int, byte, char satöbbi) és az objektum típusok (Object és leszármazottai).

    A primitíveknél tiszta sor, hogy sima érték szerinti paraméterátadás van.

    Az objektumoknál az okozza a kavarodást, hogy egy változó valójában egy referencia a valódi objektumra. Ez ugyanúgy működik mint egy pointer csak el van rejtve a programozó elől, hogy hova mutat, nem lehet vele pointer műveleteket végezni stb.
    Amit irtál az igaz, az objektum típusú változóknál is érték szerint történik a paraméterátadás, de ilyenkor a referencia értéke másolódik át. Azaz lesz egy másik referenciád ami ugyannarra az objektumra mutat. Tehát ha a metóduson belül módosítod az objektumot, akkor az eredeti is módosulni fog. Ha viszont a referenciának új értéket adsz (értékül adsz neki egy másik objektumot) azzal azeredeti referenciát nem változtatod meg azaz továbbra is az eredeti objektumra fog mutatni.

    Tehát a lényeg hogy az objektumoknál a referencia érték szerint adódik át, de mivel az eredeti objektumot tudod vele módosítani, így a működése a cím szerinti paraméterátadáshoz áll közelebb. Ezért szerintem a definíció is csak a fenti magyarázattal együtt lehet teljes.

    UI: aztán persze vannak kivételek (pl. távoli eljárások, RMI) amikor ténylegesen az egész objektum lemásolódik de az már egy másik téma.

Új hozzászólás Aktív témák