Mit csinál az equals() metódus Java-ban?
sobes.tech MI
Válasz az MI-től
A equals() metódus Java-ban két objektum egyenlőségének összehasonlítására szolgál. Alapértelmezés szerint, az Object-ből örökölt, felül nem írt objektumok esetén, az referenciákat (==) hasonlít össze, vagyis ellenőrzi, hogy a változók ugyanarra a memóriahelyre mutatnak-e.
A equals() metódus helyes felülírása fontos az objektumok tartalmuk szerint történő összehasonlításához, nem a memóriahelyük szerint.
A equals() felülírásakor az alábbi szabályokat kell követni:
- Reflexivitás: minden nem null objektum
xesetén, azx.equals(x)értéketruelegyen. - Szimmetria: minden nem null objektum
xésyesetén, hax.equals(y)true, akkory.equals(x)istruelegyen. - Transzitivitás: minden nem null objektum
x,yészesetén, hax.equals(y)ésy.equals(z)true, akkorx.equals(z)istruelegyen. - Konzisztencia: minden nem null objektum
xésyesetén, ax.equals(y)többszöri hívása ugyanazt az eredményt adja, amennyiben a összehasonlásban használt adatok nem változtak. - Minden nem null objektum
xesetén, azx.equals(null)értékefalselegyen.
Általában, a equals() felülírásakor, a hashCode() metódust is felül kell írni, betartva a szerződést: ha két objektum egyenlő a equals() szerint, akkor a hashCode() által visszaadott kódoknak egyezniük kell. A fordított nem kötelező: ha a hash kódok egyeznek, az objektumok nem feltétlenül egyenlőek.
Példa a felülírásra:
public class MyObject {
private int value;
private String name;
public MyObject(int value, String name) {
this.value = value;
this.name = name;
}
@Override
public boolean equals(Object o) {
// Összehasonlítás
if (this == o) return true;
// null és típus ellenőrzése
if (o == null || getClass() != o.getClass()) return false;
// Típuskonverzió és mezők szerinti összehasonlítás
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Hash kód generálása mezők alapján
return Objects.hash(value, name);
}
// getterek, setterek stb.
}