Klíčový rozdíl - rovná se hashCode v Javě
Equals je podobný operátoru ==, který má testovat identitu objektu, nikoli rovnost objektu. HashCode je metoda, kterou třída implicitně nebo explicitně rozebere data uložená v instanci třídy na jednu hodnotu hash, což je 32bitové celé číslo se znaménkem. Klíčový rozdíl mezi equals a hashCode v Javě spočívá v tom, že equals se používá k porovnání dvou objektů, zatímco hashCode se používá při hašování k rozhodnutí, do které skupiny by měl být objekt kategorizován.
OBSAH
1. Přehled a klíčový rozdíl
2. Co se rovná v Javě
3. Co je hashCode v Javě
4. Porovnání vedle sebe - rovná se hashCode v Javě v tabulkové formě
5. Shrnutí
Co se rovná v Javě?
Metoda equals se používá k porovnání dvou objektů. Výchozí metoda rovná se je definována ve třídě objektu. Tato implementace je podobná operátoru ==. Dva odkazy na objekty jsou stejné, pouze pokud odkazují na stejný objekt. Je možné přepsat metodu equals.
Obrázek 01: Program Java se rovná
Příkaz System.out.println (s1.equals (s2)) dá odpověď false, protože s1 a s2 odkazují na dva různé objekty. Bylo to podobné jako prohlášení System.out.println (s1 == s2);
Příkaz System.out.println (s1.equals (s3)) dá odpověď true, protože s1 a s3 odkazují na stejný objekt. Bylo to podobné jako prohlášení, System.out.println (s1 == s3);
Ve třídě Student neexistuje žádná metoda rovná se. Proto se nazývá rovná se ve třídě Object. True se zobrazí, pouze pokud odkaz na objekt směřuje na stejný objekt.
Obrázek 02: Program Java s přepsáním rovná se
Podle výše uvedeného programu je metoda equals přepsána. Objekt je předán metodě a je typem vržen Studentovi. Poté se zkontrolují hodnoty id. Pokud jsou hodnoty id podobné, vrátí hodnotu true. Pokud ne, vrátí hodnotu false. ID s1 a s2 jsou podobná. Bude se tedy tisknout pravdivě. ID s1 a s3 jsou také podobná, takže se vytiskne pravdivě.
Co je hashCode v Javě?
HashCode se používá při hašování k rozhodnutí, do které skupiny by měl být objekt kategorizován. Skupina objektů může sdílet stejný hashCode. Správná hashovací funkce může rovnoměrně rozdělit objekty do různých skupin.
Správný hashCode může mít vlastnosti následovně. Předpokládejme, že existují dva objekty jako obj1 a obj2. Pokud je obj1.equals (obj2) true, pak obj1.hashCode () se rovná obj2.hashCode (). Pokud je obj1.equals (obj2) nepravdivé, není nutné, aby obj1.hashCode () nebyl rovný obj2.hashCode (). Dva nerovné objekty mohou mít také stejný hashCode.
Obrázek 03: Třída studentů s equals a hashCode
Obrázek 04: Hlavní program
Třída Student obsahuje metody equals a hashCode. Metoda equals ve třídě Student obdrží objekt. Pokud má objekt hodnotu null, vrátí hodnotu false. Pokud třídy objektů nejsou stejné, vrátí hodnotu false. Hodnoty id jsou kontrolovány v obou objektech. Pokud jsou si podobné, vrátí se pravdivé. Jinak se vrátí false.
V hlavním programu jsou vytvářeny objekty s1 a s2. Při volání s1.equals (s2) dá true, protože metoda equals je přepsána a kontroluje hodnoty id dvou objektů. I když odkazují na dva objekty, odpověď je pravdivá, protože hodnoty id s1 a s2 jsou stejné. Protože s1.equals (s2) je pravda, hashCode s1 a s2 by měl být stejný. Tisk hashCode s1 a s2 dává stejnou hodnotu. Metodu hashCode lze použít s kolekcemi, jako je HashMap.
Jaký je rozdíl mezi equals a hashCode v Javě?
Rozdílný článek uprostřed před tabulkou
rovná se hashCode v Javě |
|
equals je metoda v Javě, která funguje podobně jako operátor ==, která má testovat identitu objektu, nikoli rovnost objektu. | hashCode je metoda, kterou třída implicitně nebo explicitně rozebere data uložená v instanci třídy na jednu hodnotu hash. |
Používání | |
Metoda equals se používá k porovnání dvou objektů. | Metoda se používá při hašování k rozhodnutí, do které skupiny by měl být objekt umístěn. |
Shrnutí - rovná se hashCode v Javě
Rozdíl v equals a hashCode v Javě spočívá v tom, že equals se používá k porovnání dvou objektů, zatímco hashCode se používá v hashování k rozhodnutí, do které skupiny by měl být objekt kategorizován.