Mida teeb meetod equals() Java-s?
sobes.tech AI
Vastus AI-lt
Java equals() meetod kasutatakse kahe objekti võrdlemiseks nende võrdsuse kontrollimiseks. Vaikimisi, juhul kui objektid pärivad Object-ist ilma selle ülekirjutamiseta, võrdleb ta viiteid objektidele (==), see tähendab, kontrollib, kas muutujad osutavad samale mälupunktile.
Õige equals() meetodi ülekirjutamine on oluline, et võrrelda objekte nende sisu järgi, mitte nende asukoha järgi mälus.
equals()-i ülekirjutamisel tuleb järgida järgmisi reegleid:
- Refleksiivsus: iga mitte-null
xobjekti puhul,x.equals(x)peab tagastamatrue. - Sümbioos: iga mitte-null
xjayobjekti puhul, kuix.equals(y)tagastabtrue, siis peab kay.equals(x)tagastamatrue. - Transitiivsus: iga mitte-null
x,yjazobjekti puhul, kuix.equals(y)jay.equals(z)mõlemad ontrue, siis peab kax.equals(z)olematrue. - Konsistents: iga mitte-null
xjayobjekti puhul, korduvadx.equals(y)kõned peavad stabiilselt tagastama sama tulemuse, kui teave, mida kasutatakse võrdlemiseks, ei ole muutunud. - Nulli suhtes: iga mitte-null
xobjekti puhul,x.equals(null)peab tagastamafalse.
Tavaliselt, equals()-i ülekirjutamisel on vaja ka ülekirjutada hashCode() meetod, järgides kontakti: kui kaks objekti on võrdsed equals()-i järgi, siis nende hashCode() väärtused peavad olema samad. Vastupidine ei ole kohustuslik: kui hashCode() väärtused on samad, ei tähenda see tingimata, et objektid on võrdsed.
Näide equals()-i ülekirjutamisest:
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) {
// Võrdlus
if (this == o) return true;
// Null ja klassi kontroll
if (o == null || getClass() != o.getClass()) return false;
// Tüübi konverteerimine ja väljade võrdlemine
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Hash-koodi genereerimine väljade põhjal
return Objects.hash(value, name);
}
// getterid, setterid jms
}