Võtmete erinevus – võrdub Java räsikoodiga
Võrdne on sarnane operaatoriga==, mille eesmärk on testida objekti identiteeti, mitte objekti võrdsust. Räsikood on meetod, mille abil klass jaotab kaudselt või selgesõnaliselt klassi eksemplari salvestatud andmed üheks räsiväärtuseks, mis on 32-bitine märgiga täisarv. Peamine erinevus võrdsete ja räsikoodi vahel Javas on see, et võrdsust kasutatakse kahe objekti võrdlemiseks, samas kui räsikoodi kasutatakse räsimisel, et otsustada, millisesse rühma objekt tuleks liigitada.
Mis võrdub Javas?
Kahe objekti võrdlemiseks kasutatakse võrdsuse meetodit. Vaikimisi võrdub meetod on määratletud objektiklassis. See teostus sarnaneb==operaatoriga. Kaks objektiviidet on võrdsed ainult siis, kui nad osutavad samale objektile. Võrdsuse meetodit on võimalik tühistada.
Joonis 01: Java programm võrdub
Väide System.out.println(s1.equals(s2)) annab vastuse vale, kuna s1 ja s2 viitavad kahele erinevale objektile. See sarnanes avaldusega System.out.println(s1==s2);
Väide System.out.println(s1.equals(s3)) annab vastuse tõeseks, kuna s1 ja s3 viitavad samale objektile. See sarnanes avaldusega System.out.println(s1==s3);
Õpilaste klassis pole võrdsete meetodit. Seetõttu nimetatakse objekti klassi võrdseid. Tõene kuvatakse ainult siis, kui objektiviide osutab samale objektile.
Joonis 02: Java programm koos tühistamisega võrdub
Vastav alt ül altoodud programmile on võrdsete meetod alistatud. Objekt edastatakse meetodile ja see kantakse üle õpilasele. Seejärel kontrollitakse ID-väärtusi. Kui ID väärtused on sarnased, tagastab see tõene. Kui ei, tagastatakse vale. S1 ja s2 ID-d on sarnased. Niisiis, see trükitakse tõeseks. Ka s1 ja s3 ID-d on sarnased, seega prinditakse tõene.
Mis on Java hashCode?
Räsikoodi kasutatakse räsimisel, et otsustada, millisesse rühma objekt tuleks liigitada. Rühm objekte võib jagada sama räsikoodi. Õige räsifunktsioon võib jaotada objektid ühtlaselt erinevatesse rühmadesse.
Õigel räsikoodil võivad olla järgmised omadused. Oletame, et on kaks objekti nagu obj1 ja obj2. Kui obj1.equals(obj2) on tõene, siis obj1.hashCode() on võrdne obj2.hashCode(). Kui obj1.equals(obj2) on väär, ei pea obj1.hashCode() olema võrdne väärtusega obj2.hashCode(). Kahel ebavõrdsel objektil võib olla ka sama räsikood.
Joonis 03: Õpilasklass võrdsete ja hashCode'iga
Joonis 04: Põhiprogramm
Õpilaste klass sisaldab võrde ja hashCode meetodeid. Võrdsuse meetod õpilaste klassis saab objekti. Kui objekt on null, tagastab see vale. Kui objektide klassid ei ole samad, tagastab see vale. ID-väärtusi kontrollitakse mõlemas objektis. Kui need on sarnased, on see tõene. Vastasel juhul tagastab see vale.
Põhiprogrammis luuakse objektid s1 ja s2. Kutsudes s1.equals(s2) annab tõene, kuna võrdub meetod alistatakse ja see kontrollib kahe objekti id-väärtusi. Kuigi need viitavad kahele objektile, on vastus tõene, kuna s1 ja s2 id väärtused on samad. Kuna s1.equals(s2) on tõene, peaks s1 ja s2 hashCode olema võrdne. Räsikoodi s1 ja s2 printimine annab sama väärtuse. HashCode meetodit saab kasutada selliste kogudega nagu HashMap.
Mis vahe on Javas võrdsete ja hashCode vahel?
võrdub Java-räsikoodiga |
|
võrdub on Java meetod, mis toimib sarnaselt==operaatoriga, mille eesmärk on testida objekti identiteeti, mitte objekti võrdsust. | hashCode on meetod, mille abil klass jaotab kaudselt või otseselt klassi eksemplari salvestatud andmed üheks räsiväärtuseks. |
Kasutus | |
Kahe objekti võrdlemiseks kasutatakse meetodit võrdub. | Meetodit kasutatakse räsimisel, et otsustada, millisesse rühma objekt paigutada. |
Kokkuvõte – võrdub Java räsikoodiga
Java võrdusväärtuste ja räsikoodide erinevus seisneb selles, et võrdsust kasutatakse kahe objekti võrdlemiseks, samas kui räsikoodi kasutatakse räsimisel, et otsustada, millisesse rühma objekt tuleks liigitada.