Kluczowa różnica - równa się vs hashCode w Javie
Równość jest podobna do operatora ==, który służy do testowania tożsamości obiektu, a nie równości obiektu. HashCode to metoda, za pomocą której klasa niejawnie lub jawnie dzieli dane przechowywane w wystąpieniu klasy na pojedynczą wartość skrótu, która jest 32-bitową liczbą całkowitą ze znakiem. Kluczową różnicą między equals i hashCode w Javie jest to, że equals jest używany do porównywania dwóch obiektów, podczas gdy hashCode jest używany do haszowania, aby zdecydować, do której grupy obiekt należy przypisać.
ZAWARTOŚĆ
1. Omówienie i kluczowe różnice
2. Co jest równe w Javie
3. Co to jest hashCode w Javie
4. Bezpośrednie porównanie - equals vs hashCode w Javie w formie tabelarycznej
5. Podsumowanie
Co jest równe w Javie?
Metoda equals służy do porównywania dwóch obiektów. Domyślna metoda equals jest zdefiniowana w klasie obiektów. Ta implementacja jest podobna do operatora ==. Dwa odwołania do obiektów są równe tylko wtedy, gdy wskazują na ten sam obiekt. Możliwe jest nadpisanie metody równości.
Rysunek 01: Program Java z równymi
Instrukcja System.out.println (s1.equals (s2)) da odpowiedź fałszywą, ponieważ s1 i s2 odnoszą się do dwóch różnych obiektów. Było podobne do instrukcji System.out.println (s1 == s2);
Instrukcja System.out.println (s1.equals (s3)) da odpowiedź „prawda”, ponieważ s1 i s3 odnoszą się do tego samego obiektu. Było podobne do instrukcji System.out.println (s1 == s3);
W klasie Student nie ma metody równości. W związku z tym wywoływana jest równość w klasie Object. Prawda jest wyświetlana tylko wtedy, gdy odniesienie do obiektu wskazuje na ten sam obiekt.
Rysunek 02: Program Java z przesłoniętym równa się
Zgodnie z powyższym programem, metoda equals jest nadpisywana. Obiekt jest przekazywany do metody i jest rzutowany na Student. Następnie sprawdzane są wartości id. Jeśli wartości id są podobne, zwróci true. Jeśli nie, zwróci fałsz. Identyfikatory s1 i s2 są podobne. Więc wydrukuje prawda. Identyfikatory s1 i s3 są również podobne, więc wyświetli się prawda.
Co to jest hashCode w Javie?
HashCode jest używany w haszowaniu, aby zdecydować, do której grupy należy przypisać obiekt. Grupa obiektów może mieć ten sam hashCode. Prawidłowa funkcja mieszająca może równomiernie rozłożyć obiekty na różne grupy.
Prawidłowy hashCode może mieć następujące właściwości. Załóżmy, że istnieją dwa obiekty, takie jak obj1 i obj2. Jeśli obj1.equals (obj2) ma wartość true, to obj1.hashCode () jest równe obj2.hashCode (). Jeśli obj1.equals (obj2) ma wartość false, nie jest konieczne, aby obj1.hashCode () nie było równe obj2.hashCode (). Dwa nierówne obiekty mogą również mieć ten sam hashCode.
Rysunek 03: Klasa ucznia z równościami i hashCode
Rysunek 04: Program główny
Klasa Student zawiera metody equals i hashCode. Metoda equals w klasie Student otrzyma obiekt. Jeśli obiekt ma wartość null, zwróci wartość false. Jeśli klasy obiektów nie są takie same, zwróci wartość false. Wartości id są sprawdzane w obu obiektach. Jeśli są podobne, zwróci prawdę. W przeciwnym razie zwróci fałsz.
W programie głównym tworzone są obiekty s1 i s2. Wywołanie s1.equals (s2) daje wartość true, ponieważ metoda equals jest nadpisywana i sprawdza wartości id dwóch obiektów. Mimo że odnoszą się do dwóch obiektów, odpowiedź jest prawdziwa, ponieważ wartości id s1 i s2 są takie same. Ponieważ wartość s1.equals (s2) jest prawdą, hashCode s1 i s2 powinny być równe. Wydrukowanie hashCode s1 i s2 daje tę samą wartość. Metody hashCode można używać z kolekcjami, takimi jak HashMap.
Jaka jest różnica między equals a hashCode w Javie?
Porównaj środek artykułu przed tabelą
equals vs hashCode w Javie |
|
equals to metoda w Javie, która działa podobnie do operatora ==, który służy do testowania tożsamości obiektu, a nie równości obiektu. | hashCode to metoda, za pomocą której klasa niejawnie lub jawnie dzieli dane przechowywane w instancji klasy na pojedynczą wartość skrótu. |
Stosowanie | |
Metoda equals służy do porównywania dwóch obiektów. | Metoda jest używana w haszowaniu, aby zdecydować, do której grupy należy umieścić obiekt. |
Podsumowanie - równa się vs hashCode w Javie
Różnica w equals i hashCode w Javie polega na tym, że equals jest używany do porównywania dwóch obiektów, podczas gdy hashCode jest używany do haszowania, aby zdecydować, do której grupy należy przypisać obiekt.