3. óra (2017.09.25.)
Diák
Feladatok
equalstest.zip annak demonstrálására, hogy a == operátort csak primitív típusok összehasonlításánál használjuk, amúgy .equals-t hívjunk.
person_orig.zip kiegészítendő, hogy ellenőrizze a bemeneti paramétereket. (feladat megoldása)
Az előző feladat megoldásából kiindulva helyes equals implementálása (Object-beli equals felülírásával). (feladat megoldása)
Egyenlőségvizsgálat
A más nyelvekben megszokott == használata nem várt működéshez vezethet, itt ez – a primitíveket leszámítva – referenciaegyenlőséget jelent, azaz az operandusok egyezőségét vizsgálja (mindkét referencia ugyanarra az objektumpéldányra mutat-e).
Referenciatípusok esetén célszerű az equals metódust használni:
String alma1 = "alma"; String alma2 = "alm" + "a"; String alma3 = new String("alma"); String alma4 = "alm" + getChar();
Az alma1 és alma2 változók ugyanarra az objektumpéldányra fognak mutatni, ugyanis a Java fordítási időben kiértékeli az alma2 jobb oldalán álló kifejezést, a memóriafoglalást csökkentendő pedig az azonos szövegek nem foglalódnak külön karakterláncként. Eredmény: az alma1 == alma2 kifejezés értéke true.
Az alma3 esetén explicit új String példányt hoztunk létre, tehát az alma1 == alma3 kifejezés értéke false, azonban az alma1.equals(alma3) vagy az alma3.equals(alma1) kifejezés értéke igaz.
Az alma1 == alma4 kifejezés értéke szintén hamis, alma4 változó jobboldala futási időben kerül kiértékelésre.