ARBEITEN MIT OBJEKTEN Flashcards
Wovon erben alle Java-Klassen implizit?
Von der Klasse Object.
toString()-Methode
Diese Methode dient der Ausgabe von beliebigen Objektinhalten als Zeichenkette.
Auslagerung der Konsolenausgabe in einer separaten Methode
Überschreiben der toString()-Methode
Impliziter Aufruf von toString() am Beispiel des „+“-Operators
Darstellung primitiver Datentypen im Hauptspeicher
„==“-Operator
Objekte werden mit dem „==“-Operator hinsichtlich ihrer Identität, nicht hinsichtlich ihres Inhalts verglichen.
equals()-Methode
Diese Methode dient dem inhaltlichen Vergleich von Objekten.
Überschreiben der equals()-Methode in der Klasse Kunde
Anforderungen an die Implementierung einer equals()-Methode
1) Reflexiv: Wird in der Methode dasselbe Objekt verglichen, muss das Ergebnis immer „true“ sein, d. h. x.equals(x) == true.
2) Symmetrisch: Es ist egal, in welcher Richtung der Vergleich stattfindet, d. h. x.equals(y) muss das gleiche Ergebnis liefern wie y.equals(x).
3) Transitiv: Wenn ein Objekt mit jeweils zwei anderen Objekten identisch ist, dann sind die anderen beiden Objekte ebenfalls identisch, d. h. wenn x.equals(y) und x.equals(z), dann auch y.equals(z).
4) Konsistent: Solange die relevanten Attribute unverändert bleiben, liefert eine Vergleichsoperation stets das gleiche Ergebnis.
5) Existent: Wenn ein zu vergleichendes Objekt nicht existiert, dann wird der Vergleich immer zu „false“ ausgewertet, d. h. x.equals(null) == false.
Was ist schneller? equals() oder ==
== schneller
hasCode()-Methode
Diese Methode liefert einen Schlüssel, der das Objekt anhand seines Inhalts möglichst eindeutig identifiziert.
Formel zur Berechnung des hashCodes() für einen gegebenen String
Überschreiben der hashCode()-Methode in der Klasse Kunde
Anforderungen an eigene hashCode()-Implementierungen
1) Die Methode muss stabil sein, d. h. zwei inhaltlich gleiche Objekte sollten stets den gleichen hashCode() erzeugen.
2) Die Berechnung muss zur equals()-Methode passen, d. h. sie muss die gleichen Attribute einbeziehen.
3) Die hashCodes() sollten möglichst „breit gestreut“ sein, d. h. nur sehr wenige unterschiedliche Attributbelegungen sollen den gleichen Hash-Wert erzeugen.
4) Es sollten nur identitätsstiftende Attribute einbezogen werden, d. h. die Identität ergibt sich nur aus fachlichen Attributen, die klar dem Objekt zuzuordnen sind. Auf andere Objekte verweisende Attribute, die nichts mit der Identität zu tun haben (Beispiel: Adresse des Kunden), sollten also nicht einbezogen werden.