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

  • Szmeby

    tag

    válasz Ablakos #11866 üzenetére

    A contains teljeskörűen működik. Ha belenézel az Object osztályba (ami minden osztály őse), láthatod, hogy az equals metódus referenciák egyenlőségét vizsgálja - lévén más információja nincs az osztályról. Azt csinálja, mint amit az == operátor.

    Tehát az equals és egyben a contains alapértelmezett működése az, hogy csak akkor tekint két objektumot egyenlőnek / a lista egy tagjának, ha az az objektum ugyanaz az objektum, mondjuk úgy, hogy ugyanazon a memóriacímen található adathalmaz.

    Abban a pillanatban, hogy kiadod a new utasítást, a jvm egy vadonatúj objektumot fog gyártani neked. Még ha ugyanazt a szöveget adod is meg neki a könyv címe paraméterben, még ha ugyanaz az évszám, még ha látszólag ugyanúgy is néz ki az az objektum, mint egy másik, a referenciájuk eltér, hiszen a new utasítással ezt kérted a jvm-től, egy új objektumot.

    A referencia alapú összehasonlítás időnként hasznos dolog, de a modelljeinkben többnyire nem ez a legjobb megoldás. Ezért készítünk az objektumainknak saját equalst, amikor azokat egymással össze akarjuk hasonlítani, és azt várjuk el tőle, hogy egyenlőnek tekintsen két könyv objektumot, ahol a cím és az évszám egyenlő. Ezt sajnos meg kell írnod, mert a jáva túl buta, hogy kitalálja a programozó gondolatait, elvárásait.
    (És készítünk nekik saját hashcode implementációt is, amikor azokat mondjuk HashSet-ben kívánjuk gyűjtögetni, vagy HashMap kulcsaként akarjuk felhasználni.)

    Tehát a Book b1 = new Book("a", 1); és a Book b2 = new Book("a", 1); eltérő referenciával bír, az alapértelmezett equals szerint ők különböző objektumok. Míg a Book b3 = b1; ugyanazzal a referenciával bír, mint a b1 objektumod, az alapértelmezett equals szerint ők ugyanazok az objektumok.

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