Obiekt Java class jest superklasą wszystkich klas Java. Wszystkie klasy Java domyślnie implementują klasę Object. Klasa Java Object udostępnia dwie ważne metody porównaj dwa obiekty w Javie , tj. równa się() I hashCode() metoda. W tej sekcji dowiemy się, jak to zrobić równa się() I hashCode() metoda działa. Wraz z tym będziemy się również uczyć jak porównać dwa obiekty w Javie z odpowiednimi przykładami.
Java udostępnia dwie metody klasy Object umożliwiające porównywanie obiektów:
- Metoda Java równa się().
- Metoda hashCode() w Javie
Metoda Java równa się().
The równa się() Metoda klasy Object porównuje równość dwóch obiektów. Te dwa obiekty będą równe, jeśli będą miały ten sam adres pamięci.
Składnia:
public boolean equals(Object obj)
Metoda analizuje obiekt referencyjny jako parametr. Zwraca wartość true, jeśli obiekty są równe, w przeciwnym razie zwraca wartość false.
Możliwe jest również, że obiekt jest równy innemu danemu obiektowi, wówczas następuje metoda równości(). relacja równoważności do porównania obiektów.
Java na przerwę
- Dla wszelkich odwołań o wartości innej niż null x, x. równa się (null) zwraca wartość fałszywą.
Krótko mówiąc, dla dowolnego odniesienia innego niż null powiedzmy X I I , zwraca wartość true wtedy i tylko wtedy, gdy oba odniesienia odnoszą się do tego samego obiektu.
Pamiętać: Kiedy zastępujemy metodę równości(), konieczne jest nadpisanie metody hashCode(). Zastępowanie jest zgodne z konwencją metody hashCode(), która stwierdza, że równy obiekt musi mieć równy kod skrótu.
Przykład metody równości().
W poniższym przykładzie stworzyliśmy konstruktor z Podwójnie I Długi klasę i przekazuje odpowiednie wartości jako argument przechowywany odpowiednio w ich obiektach.
Następnie w pierwszej instrukcji println wywołaliśmy metodę równości() i przeanalizowaliśmy obiekt y jako parametr porównujący obiekty x i y. To powraca FAŁSZ ponieważ x zawiera wartość podwójną, a y zawiera wartość długą, która nie jest równa.
Podobnie w drugiej instrukcji println wywołaliśmy metodę równości() i przeanalizowaliśmy tę samą wartość, co w konstruktorze klasy Double. To powraca PRAWDA ponieważ obiekt klasy double, tj. x, posiada tę samą wartość, którą przekazaliśmy w metodzie równości().
10 procent z 60
ObjectComparisonExample.java
public class ObjectComparisonExample { public static void main(String[] args) { //creating constructor of the Double class Double x = new Double(123.45555); //creating constructor of the Long class Long y = new Long(9887544); //invoking the equals() method System.out.println('Objects are not equal, hence it returns ' + x.equals(y)); System.out.println('Objects are equal, hence it returns ' + x.equals(123.45555)); } }
Wyjście:
Shreya Ghoshal, pierwszy mąż
Objects are not equal, hence it returns false Objects are equal, hence it returns true
Różnica między operatorem == a metodą równości().
W Jawa , == operator porównuje, czy dwa odniesienia są identyczne, czy nie. Natomiast równa się() metoda porównuje dwa obiekty.
Obiekty są równy gdy mają ten sam stan (zwykle porównywanie zmiennych). Obiekty są identyczny kiedy podzielają tożsamość klasową.
Na przykład wyrażenie obiekt1==obiekt2 testuje tożsamość, a nie równość. Podczas gdy wyrażenie obj1.equals(obj2) porównuje równość.
Metoda hashCode() w Javie
W Javie kod skrótu jest 32-bitową liczbą całkowitą ze znakiem. Jest to unikalny identyfikator nadawany przez JVM do obiektu Java. Każdy obiekt Java jest powiązany z kodem skrótu. Kod skrótu jest zarządzany przez strukturę danych opartą na skrótach, taką jak HashTable, HashSet itp.
Pamiętać: Kiedy zastępujemy metodę równości(), konieczne jest również nadpisanie metody hashCode().
Składnia:
prymitywne typy danych w Javie
public int hashCode()
Zwraca losowo wygenerowaną wartość skrótu obiektu, która jest unikalna dla każdej instancji. Losowo wygenerowana wartość może ulec zmianie podczas kilku uruchomień programu.
Ogólna umowa dotycząca hashCode jest następująca:
- Jeśli zostanie wywołana więcej niż raz podczas wykonywania aplikacji, metoda hashCode() będzie konsekwentnie zwracać ten sam kod skrótu (wartość całkowita). Należy pamiętać, że obiektu nie należy modyfikować.
- Jeśli zgodnie z metodą równości() oba obiekty są równe, wówczas wywołanie metody hashCode() na tych dwóch obiektach musi dać tę samą wartość całkowitą.
- Nie jest konieczne, aby jeśli dwa obiekty były nierówne zgodnie z metodą równości(), wówczas wywołanie metody hashCode() na tych dwóch obiektach może dać odrębną wartość całkowitą. Oznacza to, że może wygenerować ten sam kod skrótu dla obu obiektów.
Przykład metody hashCode().
W poniższym przykładzie utworzyliśmy dwie klasy Pracownik.java I HashCodeExample.java .
W klasie Pracownik zdefiniowaliśmy dwa pola regno typu int i name typu String. Następnie utworzyliśmy konstruktor klasy Pracownik i przekazujemy te dwa pola jako parametr.
Aby przeprowadzić porównanie obiektów, stworzyliśmy osobną klasę o nazwie Przykładowy kod skrótu . W tej klasie utworzyliśmy dwie instancje klasy Pracownik, tj. emp1 I mp2 . Następnie wywołaliśmy metodę hashCode() przy użyciu obiektów. Przechowujemy wartość kodu skrótu w zmiennej A I B odpowiednio.
Pracownik.java
public class Employee { private int regno; private String name; //constructor of Employee class public Employee(int regno, String name) { this.name = name; this.regno = regno; } public int getRegno() { return regno; } public void setRegno(int Regno) { this.regno = regno; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
HashCodeExample.java
public class HashcodeExample { public static void main(String[] args) { //creating two instances of the Employee class Employee emp1 = new Employee(918, 'Maria'); Employee emp2 = new Employee(918, 'Maria'); //invoking hashCode() method int a=emp1.hashCode(); int b=emp2.hashCode(); System.out.println('hashcode of emp1 = ' + a); System.out.println('hashcode of emp2 = ' + b); System.out.println('Comparing objects emp1 and emp2 = ' + emp1.equals(emp2)); } }
Wyjście:
nowa linia w Pythonie
hashcode of emp1 = 2398801145 hashcode of emp2 = 1852349007 Comparing objects emp1 and emp2 = false
Zastępowanie metody równości().
Jeśli chcemy zapewnić własną implementację, możemy zastąpić metodę równości() w następujący sposób.
//overriding equals() method @Override public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; return this.getRegno() == ((Employee) obj). getRegno(); }
Powyższy fragment kodu pokazuje, że dwóch pracowników będzie równych, jeśli będą przechowywani pod tym samym adresem pamięci lub będą mieli to samo regno. Kiedy uruchomimy program (HashCodeExample.java) z powyższym fragmentem kodu, otrzymamy następujące dane wyjściowe.
Wyjście:
hashcode of emp1 = 2032578917 hashcode of emp2 = 1531485190 Comparing objects emp1 and emp2 = true