Junior
Ko dara metode equals() Java?
sobes.tech AI
Atbilde no AI
Java equals() metode tiek izmantots, lai salīdzinātu divu objektu saturu. Pēc noklusējuma, Object klasē tas salīdzina atsauces uz objektiem, tas ir, nosaka, vai divas mainīgās norāda uz to pašu atmiņas objektu:
Tomēr, lielākā daļa Java klases (piemēram, String, Integer) pārdefinē šo metodi, lai salīdzinātu objektos esošās vērtības, nevis to atsauces:
Pārdefinējot equals(), ir svarīgi ievērot tā kontraktu:
- Refleksivitāte:
x.equals(x)ir jābūttruejebkuram nenullx. - Simetriskums:
x.equals(y)ir jābūttruetikai tad, jay.equals(x)irtrue, jebkuram nenullxuny. - Transitivitāte: Ja
x.equals(y)uny.equals(z)irtrue, tad arīx.equals(z)ir jābūttruejebkuram nenullx,yunz. - Konsistence: Daudzkārtēji
x.equals(y)izsaukumi jāatgriež tas pats rezultāts, ja objekti nav mainījušies. - **Jebkuram nenull
x,x.equals(null)ir jābūtfalse.
Piemērs, kā pārdefinēt equals():
class MyObject {
private int value;
public MyObject(int value) {
this.value = value;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
MyObject myObject = (MyObject) obj;
return value == myObject.value;
}
}
equals() izmantošana:
// Atsauces salīdzināšana (pēc noklusējuma `Object`)
Object obj1 = new Object();
Object obj2 = new Object();
boolean byReference = obj1.equals(obj2); // false
// Vērtības salīdzināšana (pārdefinēta `equals()`)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean byValue = myObj1.equals(myObj2); // true
Ir arī svarīgi pārdefinēt hashCode() metodi kopā ar equals(), lai saglabātu to kontraktu un izvairītos no problēmām ar kolekcijām, kas izmanto hashēšanu (piemēram, HashMap, HashSet).