logo

Kako primerjati dva predmeta v Javi

Objekt Java razred je superrazred vseh razredov Java. Vsi razredi Java privzeto izvajajo razred Object. Razred Java Object ponuja dve pomembni metodi za primerjaj dva objektov v Javi , tj. enako () in hashCode() metoda. V tem razdelku bomo izvedeli, kako enako () in hashCode() metoda deluje. Ob tem se bomo tudi učili kako primerjati dva predmeta v Javi z ustreznimi primeri.

Java ponuja dve metodi razreda Object za primerjavo objektov, ki sta naslednji:

  • Metoda Java equals().
  • Metoda Java hashCode().

Metoda Java equals().

The enako () metoda razreda Object primerja enakost dveh objektov. Objekta bosta enaka, če si delita isti pomnilniški naslov.

java pretvori celo število v niz

Sintaksa:

 public boolean equals(Object obj) 

Metoda razčleni referenčni objekt kot parameter. Vrne true, če so objekti enaki, sicer vrne false.

Možno je tudi, da je predmet enak drugemu danemu predmetu, potem sledi metoda equals(). ekvivalenčno razmerje primerjati predmete.

    Refleksno:če x je neničelna referenca, klicanje x.equals(x) mora vrniti true.Simetrično:Če sta dva neničelna sklica x in y, x.equals(y) se bo vrnil prav če in samo če y.equals(x) vrnitev prav .Prehodno:Če so trije neničelni sklici x,y , in z, x.equals(z) se bo tudi vrnil prav če x.equals(y ) in y.equals(z) obe vrnitvi prav .Dosledno:Če sta dva neničelna sklica x in in , večkratno klicanje x.equals(y) nenehno vrne true ali false. Ne zagotavlja nobenih informacij, uporabljenih v primerjavi.
  • Za vse neničelne reference x, x.equals(null) vrne false.

Skratka, za vsako neničelno referenco recimo x in in , vrne true, če in samo če se oba sklica nanašata na isti objekt.

Ne pozabite: Ko preglasimo metodo equals(), je treba preglasiti metodo hashCode(). Preglasitev sledi konvenciji za metodo hashCode(), ki navaja, da mora enak predmet imeti enako kodo zgoščevanja.

Primer metode equals().

V naslednjem primeru smo ustvarili konstruktor od Dvojno in dolga razreda in posreduje ustrezne vrednosti kot argument, ki je shranjen v njihovih objektih.

Po tem smo v prvem stavku println priklicali metodo equals() in razčlenili objekt y kot parameter, ki primerja objekta x in y. Vrača se lažno ker x vsebuje dvojno vrednost, y pa dolgo vrednost, ki ni enaka.

Podobno smo v drugem stavku println priklicali metodo equals() in razčlenili isto vrednost kot v konstruktorju razreda Double. Vrača se prav ker ima objekt dvojnega razreda, tj. x, enako vrednost, kot smo jo posredovali v metodi equals().

ObjectComparisonExample.java

indeks jave
 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)); } } 

Izhod:

 Objects are not equal, hence it returns false Objects are equal, hence it returns true 

Razlika med operatorjem == in metodo equals().

notri Java , the == operater primerja, ali sta dve referenci enaki ali ne. Medtem ko je enako () metoda primerja dva predmeta.

Predmeti so enaka ko imata isto stanje (običajno primerjava spremenljivk). Predmeti so enaka ko si delijo razredno identiteto.

Na primer, izraz obj1==obj2 preizkuša identiteto, ne enakosti. Medtem ko je izraz obj1.equals(obj2) primerja enakost.

Metoda Java hashCode().

V Javi je zgoščena koda 32-bitna celoštevilska vrednost s predznakom. To je edinstven ID, ki ga zagotavlja JVM v objekt Java. Vsak objekt Java je povezan z zgoščeno kodo. Zgoščevalno kodo upravlja podatkovna struktura, ki temelji na zgoščevanju, kot je HashTable, HashSet itd.

Ne pozabite: Ko preglasimo metodo equals(), je treba preglasiti tudi metodo hashCode().

dvojno povezan seznam

Sintaksa:

 public int hashCode() 

Vrne naključno ustvarjeno vrednost zgoščene kode predmeta, ki je edinstvena za vsak primerek. Naključno ustvarjena vrednost se lahko spremeni med več izvajanji programa.

Splošna pogodba za hashCode je:

  • Ko je med izvajanjem aplikacije poklicana več kot enkrat, bo metoda hashCode() dosledno vračala isto zgoščevalno kodo (celoštevilsko vrednost). Upoštevajte, da predmeta ne smete spreminjati.
  • Če sta dva objekta enaka glede na metodo equals(), mora priklic metode hashCode() na teh dveh objektih proizvesti isto vrednost celega števila.
  • Ni nujno, da če sta dva predmeta neenaka glede na metodo equals(), lahko priklic metode hashCode() za ta dva predmeta povzroči različno celoštevilsko vrednost. To pomeni, da lahko ustvari isto zgoščeno kodo za oba objekta.

Primer metode hashCode().

V naslednjem primeru smo ustvarili dva razreda Zaposleni.java in HashCodeExample.java .

V razredu Employee smo definirali dve polji regno tipa int in name tipa String. Po tem smo ustvarili konstruktor razreda Employee in posredujemo ti dve polji kot parameter.

Za izvedbo primerjave objektov smo ustvarili ločen razred z imenom HashCodeExample . V tem razredu smo ustvarili dva primerka razreda Employee, tj. emp1 in emp2 . Po tem smo priklicali metodo hashCode() z uporabo predmetov. V spremenljivki smo shranili vrednost zgoščene kode a in b , oz.

Zaposleni.java

koliko mest je v Združenih državah
 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)); } } 

Izhod:

 hashcode of emp1 = 2398801145 hashcode of emp2 = 1852349007 Comparing objects emp1 and emp2 = false 

Preglasitev metode equals().

Metodo equals() lahko preglasimo na naslednji način, če želimo zagotoviti lastno izvedbo.

 //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(); } 

Zgornji delček kode kaže, da bosta dva zaposlena enaka, če sta shranjena na istem pomnilniškem naslovu ali imata isto regno. Ko zaženemo program (HashCodeExample.java) z zgornjim izrezkom kode, dobimo naslednji rezultat.

Izhod:

 hashcode of emp1 = 2032578917 hashcode of emp2 = 1531485190 Comparing objects emp1 and emp2 = true