toString, equals, hashCode

Konzepte aus java.lang.Object

public class BoxedText {private int textWidth = 0;
private int textHeight = 0;
private char [][] text = new char [0][];
...
public boolean equals(Object o) {
if (this == o) { return true; }
if (o == null || o.getClass() != BoxedText.class) { return false; }
BoxedText b = (BoxedText)o;
//compare content
if ( textHeight != b.textHeight || textWidth != b. textWidth ) { return false ; }
for (int i = 0; i < textWidth ; i++) {
for (int j = 0; j < textHeight; j++) {
if (text[i][j] != b.text[i][j]) { return false ; }
}
}
return true;
}public int hashCode() {
int h = 7654321 + 7 * textWidth + textHeight;
for (int i = 0; i < textWidth ; i++) {
for (int j = 0; j < textHeight; j++) {
h = 1234567 * h + text[i][j];
}
}
return h;
}}

.toString()

Vordefiniert: Klassenname ( object.getClass.getName() ) und Hash-Hexadezimal-Adresse

Override: Inhalt des Objekts

.equals()

@Override
public boolean equals(Object obj) {
if (this == obj) return true;// Optimierung, garantiert x.equals(x)
if (obj == null || getClass() != obj.getClass()) {
return false; // dyn. Typen verschieden, garantiert !x.equals(null)
}
NameOfThisClass that = (NameOfThisClass) obj; // casting
...// type-specific / content-specific comparison of this and that
}

Vordefiniert: Vergleicht Objektreferenzen mit return this == y

Eigenschaften: (wenn x, y ≠ null)

  1. x.equals(null) immer false .
  1. equals ist eine Äquivalenzrelation:
    • x.equals(x) immer true (reflexiv).
    • x.equals(y) immer gleich mit y.equals(x) (symmetrisch).
    • x.equals(y) , y.equals(z)\Rarrx.equals(z) (transitiv).
  1. Solange Variablen nicht geändert werden, wiederholte Aufrufe immer gleiche Ergebnisse.
  1. Meistens (nicht immer) x.equals(y)\Rarrx.toString() gleich mit y.toString()

.hashCode()

vordefiniert: Ausschnitt aus Objekt-Referenz-Adresse, fast beliebige Zahl

Eigenschaften:

  1. x.equals(y)\Lrarrx.hashCode() == y.hashCode()
  1. Solange x nicht geändert wird, liefern wiederholte Aufrufe immer gleiche Ergebnisse.
  1. unterschiedliche Objekte - möglichst unterschiedliche Ergebnisse - gelingt nicht immer: wenn x.hashCode() == y.hashCode()⇏\not\Rarrx.equals(y)

.getClass()

gibt dynamischen Typen

x instanceof y

Wenn x ein Untertyp (eine Instanz von) y ist