Key Difference – lika med hashCode i Java
The equals liknar==-operatorn, som ska testa för objektidentitet snarare än objektlikhet. HashCode är en metod genom vilken en klass implicit eller explicit bryter ner data som lagras i en instans av klassen till ett enda hashvärde, vilket är ett 32-bitars signerat heltal. Den viktigaste skillnaden mellan equals och hashCode i Java är att equals används för att jämföra två objekt medan hashCode används i hash för att bestämma vilken grupp ett objekt ska kategoriseras i.
Vad är lika i Java?
metoden lika används för att jämföra två objekt. Standardmetoden är definierad i objektklassen. Den implementeringen liknar==-operatorn. De två objektreferenserna är bara lika om de pekar på samma objekt. Det är möjligt att åsidosätta metoden lika.
Figur 01: Java-program med lika
satsen System.out.println(s1.equals(s2)) kommer att ge svaret falskt eftersom s1 och s2 hänvisar till två olika objekt. Det liknade påståendet, System.out.println(s1==s2);
satsen System.out.println(s1.equals(s3)) ger svaret sant eftersom s1 och s3 hänvisar till samma objekt. Det liknade påståendet, System.out.println(s1==s3);
Det finns ingen lika metod i studentklassen. Därför kallas lika i klassen Object. True visas endast om objektreferensen pekar på samma objekt.
Figur 02: Java-program med åsidosatta likheter
I enlighet med ovanstående program åsidosätts lika-metoden. Ett objekt skickas till metoden och det typcastas till Student. Därefter kontrolleras id-värdena. Om id-värdena är liknande, kommer det att returnera sant. Om inte kommer det att returnera falskt. Id för s1 och s2 är liknande. Så det kommer att skrivas ut sant. ID:n för s1 och s3 är också lika, så det kommer att skrivas ut sant.
Vad är hashCode i Java?
Hashkoden används i hashning för att bestämma i vilken grupp ett objekt ska kategoriseras. En grupp objekt kan dela samma hashCode. En korrekt hashfunktion kan fördela objekt jämnt i olika grupper.
En korrekt hashkod kan ha egenskaper enligt följande. Antag att det finns två objekt som obj1 och obj2. Om obj1.equals(obj2) är sant, så är obj1.hashCode() lika med obj2.hashCode(). Om obj1.equals(obj2) är falsk, är det inte nödvändigt att obj1.hashCode() inte är lika med obj2.hashCode(). De två ojämlika objekten kan också ha samma hashCode.
Figur 03: Elevklass med lika och hashCode
Figur 04: Huvudprogram
Klassen Student innehåller metoderna equals och hashCode. Likametoden i klassen Student kommer att få ett objekt. Om objektet är null kommer det att returnera false. Om klasserna för objekten inte är desamma kommer det att returnera false. ID-värdena kontrolleras i båda objekten. Om de är lika, kommer det att återgå till sanning. Annars kommer det att returnera falskt.
I huvudprogrammet skapas objekten s1 och s2. När man anropar s1.equals(s2) ger true eftersom equals-metoden åsidosätts och den kontrollerar id-värdena för de två objekten. Även om de syftar på två objekt, är svaret sant eftersom id-värdena för s1 och s2 är desamma. Eftersom s1.equals(s2) är sant, bör hashkoden för s1 och s2 vara lika. Att skriva ut hashkoden för s1 och s2 ger samma värde. HashCode-metoden kan användas med samlingar som HashMap.
Vad är skillnaden mellan lika och hashCode i Java?
equals vs hashCode i Java |
|
equals är en metod i Java som fungerar liknande operatorn==, som är att testa för objektidentitet snarare än objektlikhet. | hashCode är en metod genom vilken en klass implicit eller explicit bryter ner data som lagras i en instans av klassen till ett enda hashvärde. |
Användning | |
Metoden lika används för att jämföra två objekt. | Metoden används vid hashning för att bestämma vilken grupp ett objekt ska placeras i. |
Sammanfattning – är lika med hashCode i Java
Skillnaden mellan lika och hashCode i Java är att lika används för att jämföra två objekt medan hashkoden används i hash för att bestämma vilken grupp ett objekt ska kategoriseras i.