Różnica między równymi a hashCode w Javie

Spisu treści:

Różnica między równymi a hashCode w Javie
Różnica między równymi a hashCode w Javie

Wideo: Różnica między równymi a hashCode w Javie

Wideo: Różnica między równymi a hashCode w Javie
Wideo: Equals and Hashcode Contract in Java [Important Java Interview Question] | Code Decode 2024, Listopad
Anonim

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.

Różnica między równymi a hashCode w Javie
Różnica między równymi a hashCode w Javie

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.

Różnica między równaniami a hashCode w Java_Figure 02
Różnica między równaniami a hashCode w Java_Figure 02

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.

Różnica między równaniem a hashCode w Java_Figure 03
Różnica między równaniem a hashCode w Java_Figure 03

Rysunek 03: Klasa uczniów z równaniami i hashCode

Kluczowa różnica między równaniami a hashCode w Javie
Kluczowa różnica między równaniami a hashCode w Javie

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.

Zalecana: