Junior
Mit csinál az equals() metódus Java-ban?
sobes.tech MI
Válasz az MI-től
A equals() metódus Java-ban az két objektum tartalmának összehasonlítására szolgál. Alapértelmezés szerint, az Object osztályban, az objektumok referenciáit hasonlítja össze, vagyis megállapítja, hogy két változó ugyanarra az objektumra mutat-e a memóriában.
Azonban, a Java legtöbb osztálya (például String, Integer) felülírja ezt a metódust, hogy az objektumokban tárolt értékeket hasonlítsa össze, nem a referenciákat.
A equals() felülírásakor fontos betartani a szerződését:
- Reflexivitás:
x.equals(x)minden nem-nullxeseténtruekell legyen. - Szimmetria:
x.equals(y)akkor és csak akkortrue, hay.equals(x)istrue, minden nem-nullxésyesetén. - Transzitivitás: Ha
x.equals(y)ésy.equals(z)true, akkorx.equals(z)istruekell legyen minden nem-nullx,y,zesetén. - Konzisztencia: Többszöri hívás a
x.equals(y)-re ugyanazt az eredményt kell adja, amíg az objektumok nem változnak. - **Minden nem-null
xesetén,x.equals(null)falsekell legyen.
Példa a equals() felülírására:
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;
}
}
Az equals() használata:
// Hivatkozás szerinti összehasonlítás (alapértelmezett Object-ben)
Object obj1 = new Object();
Object obj2 = new Object();
boolean hivatkozással = obj1.equals(obj2); // false
// Érték szerinti összehasonlítás (az `equals()` felülírása után)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean értékkel = myObj1.equals(myObj2); // true
Fontos, hogy az equals() felülírásakor a hashCode() metódust is felül kell írni, hogy megőrizzük a szerződésüket és elkerüljük a hash-alapú kollekciók, például a HashMap, HashSet problémáit.