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 obiektów. HashCode to metoda, za pomocą której klasa niejawnie lub jawnie dzieli dane przechowywane w instancji klasy na pojedynczą wartość skrótu, która jest 32-bitową liczbą całkowitą ze znakiem. Kluczowa różnica między równaniem a hashCode w Javie polega na tym, że równanie jest używane do porównywania dwóch obiektów, podczas gdy hashCode jest używany podczas mieszania, aby zdecydować, do której grupy należy zaklasyfikować obiekt.
Co jest równe w Javie?
Metoda równości jest używana do porównywania dwóch obiektów. Domyślna metoda równa jest zdefiniowana w klasie obiektów. Ta implementacja jest podobna do operatora==. Te dwa odniesienia 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ównością
Instrukcja System.out.println(s1.equals(s2)) da odpowiedź fałsz, ponieważ s1 i s2 odnoszą się do dwóch różnych obiektów. Przypominało to stwierdzenie System.out.println(s1==s2);
Instrukcja System.out.println(s1.equals(s3)) da odpowiedź true, ponieważ s1 i s3 odnoszą się do tego samego obiektu. Przypominało to stwierdzenie System.out.println(s1==s3);
Nie ma metody równości w klasie Student. Dlatego wywoływane jest równanie w klasie Object. Prawda jest wyświetlana tylko wtedy, gdy odwołanie do obiektu wskazuje na ten sam obiekt.
Rysunek 02: Program Java z zastąpionym równa się
Zgodnie z powyższym programem, metoda równości jest zastępowana. Obiekt jest przekazywany do metody i jest rzutowany na typ Studenta. Następnie sprawdzane są wartości id. Jeśli wartości id są podobne, zwróci true. Jeśli nie, zwróci false. Identyfikatory s1 i s2 są podobne. Tak więc wypisze true. Identyfikatory s1 i s3 są również podobne, więc wypisze true.
Co to jest hashCode w Javie?
HashCode jest używany podczas haszowania, aby zdecydować, do której grupy należy zaklasyfikować obiekt. Grupa obiektów może współdzielić ten sam hashCode. Prawidłowa funkcja mieszająca może równomiernie rozdzielić obiekty na różne grupy.
Prawidłowy kod hashCode może mieć następujące właściwości. Załóżmy, że istnieją dwa obiekty jako obj1 i obj2. Jeśli obj1.equals(obj2) jest prawdziwe, 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 uczniów z równaniami i hashCode
Rysunek 04: Program główny
Klasa Student zawiera metody equals i hashCode. Metoda równości w klasie Student otrzyma obiekt. Jeśli obiekt ma wartość null, zwróci false. Jeśli klasy obiektów nie są takie same, zwróci false. Wartości id są sprawdzane w obu obiektach. Jeśli są podobne, zwróci prawdę. W przeciwnym razie zwróci false.
W programie głównym tworzone są obiekty s1 i s2. Wywołanie s1.equals(s2) da true, ponieważ metoda equals jest nadpisana i sprawdza wartości identyfikatorów 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ż s1.equals(s2) jest prawdziwe, hashCode s1 i s2 powinien być równy. Wydrukowanie hashCode s1 i s2 daje tę samą wartość. Metoda hashCode może być używana z kolekcjami takimi jak HashMap.
Jaka jest różnica między równaniem a hashCode w Javie?
równa się 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 obiektów. | hashCode to metoda, za pomocą której klasa pośrednio lub jawnie dzieli dane przechowywane w instancji klasy na pojedynczą wartość skrótu. |
Użycie | |
Metoda equals służy do porównywania dwóch obiektów. | Metoda jest używana podczas mieszania, aby zdecydować, do której grupy należy umieścić obiekt. |
Podsumowanie – równa się vs hashCode w Javie
Różnica w równaniach i hashCode w Javie polega na tym, że równanie jest używane do porównywania dwóch obiektów, podczas gdy hashCode jest używany podczas mieszania do decydowania, do której grupy należy zaklasyfikować obiekt.