Java-object class is de superklasse van alle Java-klassen. Alle Java-klassen implementeren standaard de Object-klasse. De klasse Java Object biedt de twee belangrijke methoden hiervoor vergelijk er twee objecten op Java , d.w.z. is gelijk aan() En hashCode() methode. In dit gedeelte leren we hoe is gelijk aan() En hashCode() methode werkt. Daarnaast zullen we ook leren hoe twee objecten in Java te vergelijken met de juiste voorbeelden.
Java biedt de twee methoden van de Object-klasse om de objecten te vergelijken:
- Java is gelijk aan() Methode
- Java-hashCode()-methode
Java is gelijk aan() Methode
De is gelijk aan() methode van de Object-klasse vergelijkt de gelijkheid van twee objecten. De twee objecten zijn gelijk als ze hetzelfde geheugenadres delen.
Syntaxis:
public boolean equals(Object obj)
De methode ontleedt een referentieobject als een parameter. Het retourneert waar als de objecten gelijk zijn, anders wordt onwaar geretourneerd.
Het is ook mogelijk dat een object gelijk is aan een ander gegeven object, dan volgt de equals() methode de gelijkwaardigheidsrelatie om de objecten te vergelijken.
- Voor elke niet-null-referentie x, x.is gelijk aan(null) retourneert vals.
Kortom, zeg voor elke niet-null-referentie X En En , retourneert het waar als en slechts als beide verwijzingen naar hetzelfde object verwijzen.
Herinneren: Wanneer we de methode equals() overschrijven, is het noodzakelijk om de methode hashCode() te overschrijven. Overschrijven volgt de conventie voor de hashCode()-methode die stelt dat het gelijke object een gelijke hashcode moet hebben.
voor lus-java
Voorbeeld van de equals()-methode
In het volgende voorbeeld hebben we gemaakt bouwer van de Dubbele En Lang class en geeft overeenkomstige waarden door, als argument dat respectievelijk in hun objecten wordt opgeslagen.
Daarna hebben we in de eerste println-instructie de equals()-methode aangeroepen en een object y ontleed als een parameter die het object x en y vergelijkt. Het keert terug vals omdat x de dubbele waarde bevat en y de lange waarde bevat die niet gelijk is.
Op dezelfde manier hebben we in de tweede println-instructie de methode equals() aangeroepen en dezelfde waarde geparseerd als in de constructor van de klasse Double. Het keert terug WAAR omdat het object van dubbele klasse, dat wil zeggen x, dezelfde waarde heeft als we hebben doorgegeven in de equals() methode.
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)); } }
Uitgang:
Objects are not equal, hence it returns false Objects are equal, hence it returns true
Verschil tussen == Operator en equals() Methode
In Java , de == operator vergelijkt of twee referenties identiek zijn of niet. Terwijl de is gelijk aan() methode vergelijkt twee objecten.
Objecten zijn gelijkwaardig wanneer ze dezelfde status hebben (meestal worden variabelen vergeleken). Objecten zijn identiek wanneer zij de klassenidentiteit delen.
De uitdrukking bijvoorbeeld obj1==obj2 test de identiteit, niet de gelijkheid. Terwijl de uitdrukking obj1.is gelijk aan(obj2) vergelijkt gelijkheid.
Java-hashCode()-methode
In Java is hashcode een 32-bits geheel getal met teken. Het is een uniek ID verstrekt door JVM naar Java-object. Elk Java-object is gekoppeld aan de hashcode. De hashcode wordt beheerd door een op hash gebaseerde gegevensstructuur, zoals HashTable, HashSet, enz.
Herinneren: Wanneer we de methode equals() overschrijven, is het noodzakelijk om ook de methode hashCode() te overschrijven.
Syntaxis:
hoekig materiaal
public int hashCode()
Het retourneert een willekeurig gegenereerde hashcodewaarde van het object die uniek is voor elke instantie. De willekeurig gegenereerde waarde kan veranderen tijdens de verschillende uitvoeringen van het programma.
Het algemene contract voor hashCode is:
- Wanneer deze meer dan één keer wordt aangeroepen tijdens de uitvoering van een toepassing, retourneert de methode hashCode() consequent dezelfde hashcode (gehele waarde). Houd er rekening mee dat het object niet mag worden gewijzigd.
- Als de twee objecten gelijk zijn volgens de equals()-methode, moet het aanroepen van de hashCode()-methode op deze twee objecten dezelfde gehele waarde opleveren.
- Het is niet nodig dat als de twee objecten ongelijk zijn volgens de equals()-methode, het aanroepen van de hashCode()-methode op deze twee objecten een verschillende gehele waarde kan opleveren. Het betekent dat het voor beide objecten dezelfde hashcode kan produceren.
Voorbeeld van de hashCode()-methode
In het volgende voorbeeld hebben we twee klassen gemaakt Werknemer.java En HashCodeExample.java .
In de klasse Werknemer hebben we twee velden gedefinieerd, namelijk van het type int en de naam van het type String. Daarna hebben we een constructor van de klasse Employee gemaakt en geven deze twee velden door als parameter.
Om de vergelijking van objecten uit te voeren, hebben we een aparte klasse gemaakt met de naam HashCodeVoorbeeld . In deze klasse hebben we twee exemplaren van de klasse Employee gemaakt, d.w.z. werk1 En werk2 . Daarna hebben we de methode hashCode() aangeroepen met behulp van objecten. We hebben de hashcodewaarde in de variabele opgeslagen A En B respectievelijk.
Werknemer.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)); } }
Uitgang:
hoe u een huidige datum in Java kunt krijgen
hashcode of emp1 = 2398801145 hashcode of emp2 = 1852349007 Comparing objects emp1 and emp2 = false
Methode equals() overschrijven
We kunnen de equals()-methode op de volgende manier overschrijven als we een eigen implementatie willen bieden.
//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(); }
Het bovenstaande codefragment laat zien dat twee werknemers gelijk zijn als ze op hetzelfde geheugenadres zijn opgeslagen of dezelfde regno hebben. Wanneer we het programma (HashCodeExample.java) uitvoeren met het bovenstaande codefragment, krijgen we de volgende uitvoer.
Uitgang:
hashcode of emp1 = 2032578917 hashcode of emp2 = 1531485190 Comparing objects emp1 and emp2 = true