61. Objekte vergleichen (equals)
Operator wird für den Vergleich von zwei komplexen Datentypen (Object, String, …) verwendet (entspricht dem ‘==’ bei primitiven Datentypen).
Das ‘==’ vergleicht die Werte der beiden Variablen, jedoch enthalten Objektvariablen lediglich Referenzen. Verweisen zwei Objekvariablen auf das gleiche Objekt so sind diese Variablen identisch ( per ==) Besitzen zwei Objekte die gleichen Inhalte, so sind sie identisch (per equals):
<Object1>.equals(<Object2>)
Soll die Methode bei Objekten eigener Klassen angewendet werden muss die von Object vererbte equals-Methode überschrieben werden, um zu definieren, was man selbst unter Gleichheit versteht. Hier interessieren z.B. nur die Eigenschaften des Fahrzeugs (Leistung, Hersteller, Anzahl der Türen - somit nicht der Preis)
Hint
Eine Vergleich mit einem Null-Objekt ist stets false
Vergleich von zwei primitiven Datentypen:
@Override
public boolean equals(Object obj)
{
//Der Teil ist Standard (auswendig lernen)
if (!(obj instanceof PKW))
{ //prüfe ob Objekt vom Typ PKW ist
return false;
}
PKW o = (PKW) obj; //Objekt wird auf PKW gecastet
//Dieser Teil ist anwendungsspezifisch
//Vergleich primitiver Datentypen
if (this .getLeistung() != o.leistung)
{
return false;
}
if (this .anzahlTueren != o .anzahlTueren )
{
return false;
}
// Vergleich komplexer Datentypen
// Da es sich um einen String handelt muss für den Vergleich abermals die equals-Methode aufgerufen werden
//Merke : Es handelt sich nicht um die gerade definierte equals-Methode (Rekursion) sondern um die equals-Methode der String-Klasse
if (!this .getHersteller().equalsIgnoreCase(o.getHersteller()))
{
return false;
}
return true;
}
Important
Wird bei dem Aufruf der equals-Funktion komplexe Datentypen (z.B. String) miteinander verglichen, muss für diese die equals-Methode zuvor ebenso angepasst werden (wie bei clone()) (hier nicht nötig, da String.equals die korrekte Methode ist).
equalsIgnoreCase … nur bei String-Vergleich: Groß- und Kleinschreibung interessiert nicht