Java-Objekt Klasse ist die Superklasse aller Java-Klassen. Alle Java-Klassen implementieren standardmäßig die Object-Klasse. Die Java Object-Klasse stellt die beiden wichtigen Methoden bereit vergleiche zwei Objekte in Java , d.h. gleich() Und Hash-Code() Methode. In diesem Abschnitt erfahren Sie, wie das geht gleich() Und Hash-Code() Methode funktioniert. Daneben werden wir auch lernen wie man zwei Objekte in Java vergleicht mit passenden Beispielen.
Java stellt die beiden Methoden der Object-Klasse zum Vergleichen der Objekte bereit:
String n Java
- Java-equals()-Methode
- Java hashCode()-Methode
Java-equals()-Methode
Der gleich() Methode der Object-Klasse vergleicht die Gleichheit zweier Objekte. Die beiden Objekte sind gleich, wenn sie dieselbe Speicheradresse haben.
Syntax:
public boolean equals(Object obj)
Die Methode analysiert ein Referenzobjekt als Parameter. Es gibt „true“ zurück, wenn die Objekte gleich sind, andernfalls wird „false“ zurückgegeben.
Es ist auch möglich, dass ein Objekt einem anderen gegebenen Objekt gleich ist, dann folgt die Methode equal() Äquivalenzbeziehung um die Objekte zu vergleichen.
- Für jede Nicht-Null-Referenz x, x.equals(null) gibt false zurück.
Kurz gesagt, zum Beispiel für jede Nicht-Null-Referenz X Und Und , gibt es genau dann true zurück, wenn beide Referenzen auf dasselbe Objekt verweisen.
Erinnern: Wenn wir die Methode equal() überschreiben, ist es notwendig, die Methode hashCode() zu überschreiben. Beim Überschreiben gilt die Konvention für die Methode hashCode(), die besagt, dass das gleiche Objekt den gleichen Hash-Code haben muss.
Beispiel für die Methode equal()
Im folgenden Beispiel haben wir erstellt Konstrukteur des Doppelt Und Lang Klasse und übergibt entsprechende Werte als Argument, die jeweils in ihren Objekten gespeichert sind.
Danach haben wir in der ersten println-Anweisung die Methode equal() aufgerufen und ein Objekt y als Parameter analysiert, der die Objekte x und y vergleicht. Es kehrt zurück FALSCH weil x den Double-Wert enthält und y den Long-Wert, der nicht gleich ist.
In ähnlicher Weise haben wir in der zweiten println-Anweisung die Methode equal() aufgerufen und denselben Wert wie im Konstruktor der Double-Klasse analysiert. Es kehrt zurück WAHR weil das Objekt der Doppelklasse, d. h. x, denselben Wert enthält, den wir in der Methode equal() übergeben haben.
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)); } }
Ausgabe:
Objects are not equal, hence it returns false Objects are equal, hence it returns true
Unterschied zwischen dem Operator == und der Methode equal()
In Java , Die == Der Operator vergleicht, ob zwei Referenzen identisch sind oder nicht. Während die gleich() Methode vergleicht zwei Objekte.
Objekte sind gleich wenn sie den gleichen Zustand haben (normalerweise beim Vergleich von Variablen). Objekte sind identisch wenn sie die Klassenidentität teilen.
Zum Beispiel der Ausdruck obj1==obj2 testet die Identität, nicht die Gleichheit. Während der Ausdruck obj1.equals(obj2) vergleicht Gleichheit.
Java hashCode()-Methode
In Java ist Hash-Code ein 32-Bit-Ganzzahlwert mit Vorzeichen. Es handelt sich um eine eindeutige ID, die von bereitgestellt wird JVM zum Java-Objekt. Jedes Java-Objekt ist mit dem Hash-Code verknüpft. Der Hash-Code wird von einer Hash-basierten Datenstruktur wie HashTable, HashSet usw. verwaltet.
Erinnern: Wenn wir die Methode equal() überschreiben, muss auch die Methode hashCode() überschrieben werden.
Syntax:
public int hashCode()
Es gibt einen zufällig generierten Hash-Codewert des Objekts zurück, der für jede Instanz eindeutig ist. Der zufällig generierte Wert kann sich während der verschiedenen Ausführungen des Programms ändern.
Der allgemeine Vertrag für hashCode lautet:
- Wenn sie während der Ausführung einer Anwendung mehr als einmal aufgerufen wird, gibt die Methode hashCode() stets denselben Hash-Code (Ganzzahlwert) zurück. Beachten Sie, dass das Objekt nicht geändert werden sollte.
- Wenn die beiden Objekte gemäß der Methode equal() gleich sind, muss der Aufruf der Methode hashCode() für diese beiden Objekte denselben ganzzahligen Wert erzeugen.
- Wenn die beiden Objekte gemäß der Methode equal() ungleich sind, ist es nicht erforderlich, dass der Aufruf der Methode hashCode() für diese beiden Objekte möglicherweise unterschiedliche ganzzahlige Werte erzeugt. Das bedeutet, dass für beide Objekte derselbe Hash-Code erzeugt werden kann.
Beispiel für die Methode hashCode()
Im folgenden Beispiel haben wir zwei Klassen erstellt Employee.java Und HashCodeExample.java .
In der Employee-Klasse haben wir zwei Felder regno vom Typ int und name vom Typ String definiert. Danach haben wir einen Konstruktor der Employee-Klasse erstellt und übergeben diese beiden Felder als Parameter.
Um den Vergleich von Objekten durchzuführen, haben wir eine separate Klasse mit dem Namen erstellt HashCodeExample . In dieser Klasse haben wir zwei Instanzen der Employee-Klasse erstellt, d. h. emp1 Und emp2 . Danach haben wir die Methode hashCode() mithilfe von Objekten aufgerufen. Wir haben den Hash-Code-Wert in der Variablen gespeichert A Und B , jeweils.
Employee.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)); } }
Ausgabe:
hashcode of emp1 = 2398801145 hashcode of emp2 = 1852349007 Comparing objects emp1 and emp2 = false
Überschreiben der Methode equal()
Wir können die Methode equal() auf folgende Weise überschreiben, wenn wir eine eigene Implementierung bereitstellen möchten.
//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(); }
Der obige Codeausschnitt zeigt, dass zwei Mitarbeiter gleich sind, wenn sie an derselben Speicheradresse gespeichert sind oder denselben Regno haben. Wenn wir das Programm (HashCodeExample.java) mit dem obigen Codeausschnitt ausführen, erhalten wir die folgende Ausgabe.
String-Array
Ausgabe:
hashcode of emp1 = 2032578917 hashcode of emp2 = 1531485190 Comparing objects emp1 and emp2 = true