Java objekts klase ir visu Java klašu superklase. Visas Java klases pēc noklusējuma ievieš objektu klasi. Java Object klase nodrošina divas svarīgas metodes salīdziniet divus objekti Java valodā , t.i. vienāds () un hashCode() metodi. Šajā sadaļā mēs uzzināsim, kā vienāds () un hashCode() metode darbojas. Paralēli tam mēs arī mācīsimies kā salīdzināt divus objektus Java ar pareiziem piemēriem.
instanceof java
Java nodrošina divas objektu klases metodes, lai salīdzinātu objektus:
- Java ir vienāds () metode
- Java hashCode() metode
Java ir vienāds () metode
The vienāds () Objektu klases metode salīdzina divu objektu vienādību. Abi objekti būs vienādi, ja tiem ir viena un tā pati atmiņas adrese.
Sintakse:
public boolean equals(Object obj)
Metode parsē atsauces objektu kā parametru. Tas atgriež patiesu, ja objekti ir vienādi, pretējā gadījumā atgriež false.
Ir arī iespējams, ka objekts ir vienāds ar citu doto objektu, tad vienāds() metode seko ekvivalences attiecības salīdzināt objektus.
- Jebkurai atsaucei, kas nav nulles x, x.vienāds(null) atgriež viltus.
Īsāk sakot, par jebkuru ne-null atsauci teikt x un un , tas atgriež patiesu tad un tikai tad, ja abas atsauces attiecas uz vienu un to pašu objektu.
Atcerieties: Kad mēs ignorējam vienāds() metodi, ir nepieciešams ignorēt hashCode() metodi. Ignorējot, ievērojiet hashCode() metodes konvenciju, kas nosaka, ka vienādam objektam ir jābūt vienādam jaucējkodam.
Vienāds() metodes piemērs
Nākamajā piemērā mēs esam izveidojuši konstruktors no Dubults un Gari klasē un nodod atbilstošās vērtības kā argumentu, kas attiecīgi tiek saglabāts to objektos.
Pēc tam pirmajā println priekšrakstā mēs esam izsaukuši equals() metodi un parsējuši objektu y kā parametru, kas salīdzina objektu x un y. Tas atgriežas viltus jo x ir dubultā vērtība un y ir garā vērtība, kas nav vienāda.
Līdzīgi, otrajā println priekšrakstā mēs esam izsaukuši vienāds() metodi un parsējuši to pašu vērtību kā Double klases konstruktorā. Tas atgriežas taisnība jo dubultklases objektam, t.i., x, ir tāda pati vērtība, kādu esam nodevuši vienādības() metodē.
ObjectComparisonExample.java
salīdzināms interfeiss 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)); } }
Izvade:
Objects are not equal, hence it returns false Objects are equal, hence it returns true
Atšķirība starp == operatoru un vienāds() metodi
In Java , == operators salīdzina, vai divas atsauces ir identiskas vai nē. Tā kā vienāds () metode salīdzina divus objektus.
Objekti ir vienāds kad tiem ir vienāds stāvoklis (parasti salīdzinot mainīgos). Objekti ir identisks kad viņiem ir kopīga klases identitāte.
Piemēram, izteiksme obj1==obj2 pārbauda identitāti, nevis vienlīdzību. Kamēr izteiksme obj1.equals(obj2) salīdzina vienlīdzību.
Java hashCode() metode
Java valodā jaucējkods ir vesela skaitļa vērtība ar 32 bitu zīmi. Tas ir unikāls ID, ko nodrošina JVM uz Java objektu. Katrs Java objekts ir saistīts ar jaucējkodu. Jaucējkodu pārvalda uz jaucējkodiem balstīta datu struktūra, piemēram, HashTable, HashSet utt.
Atcerieties: Ignorējot vienāds() metodi, ir nepieciešams ignorēt arī hashCode() metodi.
Sintakse:
tādas vietnes kā coomeet
public int hashCode()
Tas atgriež nejauši ģenerētu objekta jaucējkoda vērtību, kas ir unikāla katram instancē. Nejauši ģenerētā vērtība var mainīties vairāku programmas izpildes laikā.
Vispārējais līgums par hashCode ir:
- Ja lietojumprogrammas izpildes laikā tā tiek izsaukta vairāk nekā vienu reizi, metode hashCode() konsekventi atgriezīs to pašu jaucējkodu (vesela skaitļa vērtību). Ņemiet vērā, ka objektu nedrīkst modificēt.
- Ja abi objekti ir vienādi saskaņā ar vienādu () metodi, tad, izsaucot hashCode() metodi šiem diviem objektiem, ir jāiegūst viena un tā pati vesela skaitļa vērtība.
- Nav nepieciešams, ka, ja abi objekti ir nevienādi saskaņā ar equals() metodi, tad hashCode() metodes izsaukšana šajos divos objektos var radīt atšķirīgu veselu skaitļu vērtību. Tas nozīmē, ka tas var radīt vienu un to pašu jaucējkodu abiem objektiem.
HashCode() metodes piemērs
Nākamajā piemērā mēs esam izveidojuši divas klases Darbinieks.java un HashCodeExample.java .
Klasē Darbinieks esam definējuši divus laukus regno tipa int un tipa String nosaukumu. Pēc tam esam izveidojuši klases Darbinieks konstruktoru un nododam šos divus laukus kā parametru.
pārvērst int par virkni c++
Lai veiktu objektu salīdzināšanu, esam izveidojuši atsevišķu klasi ar nosaukumu HashCodePiemērs . Šajā klasē esam izveidojuši divus darbinieku klases gadījumus, t.i. emp1 un emp2 . Pēc tam mēs esam izsaukuši hashCode () metodi, izmantojot objektus. Mēs esam saglabājuši jaucējkoda vērtību mainīgajā a un b , attiecīgi.
Darbinieks.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)); } }
Izvade:
hashcode of emp1 = 2398801145 hashcode of emp2 = 1852349007 Comparing objects emp1 and emp2 = false
Overriding equals() metode
Mēs varam ignorēt vienāds() metodi šādā veidā, ja vēlamies nodrošināt savu ieviešanu.
//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(); }
Iepriekš minētais koda fragments parāda, ka divi darbinieki būs vienādi, ja tie tiek glabāti vienā atmiņas adresē vai tiem ir vienāds regno. Palaižot programmu (HashCodeExample.java) ar iepriekš minēto koda fragmentu, mēs iegūstam šādu izvadi.
Izvade:
hashcode of emp1 = 2032578917 hashcode of emp2 = 1531485190 Comparing objects emp1 and emp2 = true