Wat doet de methode equals() in Java?
sobes.tech AI
Antwoord van AI
De equals()-methode in Java wordt gebruikt om twee objecten op gelijkheid te vergelijken. Standaard vergelijkt het, voor objecten die van Object erven zonder deze te overschrijven, de referenties (==), dat wil zeggen, het controleert of de variabelen naar dezelfde geheugenlocatie wijzen.
Het correct overschrijven van de equals()-methode is belangrijk om objecten op basis van hun inhoud te vergelijken, niet op basis van hun geheugenlocatie.
Bij het overschrijven van equals() moeten de volgende regels worden gevolgd:
- Reflexiviteit: voor elk niet-nul object
xmoetx.equals(x)trueretourneren. - Symmetrie: voor alle niet-nul objecten
xeny, alsx.equals(y)trueretourneert, dan moety.equals(x)ooktrueretourneren. - Transitiviteit: voor alle niet-nul objecten
x,yenz, alsx.equals(y)eny.equals(z)trueretourneren, dan moetx.equals(z)ooktrueretourneren. - Consistentie: voor niet-nul objecten
xeny, moeten meerdere aanroepen vanx.equals(y)consequent hetzelfde resultaat geven, zolang de informatie die wordt gebruikt voor de vergelijking niet verandert. - Voor elk niet-nul object
x, moetx.equals(null)falseretourneren.
Gewoonlijk, bij het overschrijven van equals(), moet ook de methode hashCode() worden overschreven, met inachtneming van het contract: als twee objecten gelijk zijn volgens equals(), moeten hun hashcodes, geretourneerd door hashCode(), gelijk zijn. Het omgekeerde is niet verplicht: als hashcodes gelijk zijn, hoeven de objecten niet noodzakelijk gelijk te zijn.
Voorbeeld van overschrijving:
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) {
// Vergelijking zelf
if (this == o) return true;
// Null- en typecontrole
if (o == null || getClass() != o.getClass()) return false;
// Typecast en vergelijking op velden
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Generatie van hashcode op basis van velden
return Objects.hash(value, name);
}
// getters, setters, etc.
}