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)
x.equals(null)
immerfalse
.
-
equals ist eine Äquivalenzrelation:
x.equals(x)
immertrue
(reflexiv).
x.equals(y)
immer gleich mity.equals(x)
(symmetrisch).
x.equals(y)
,y.equals(z)
x.equals(z)
(transitiv).
- Solange Variablen nicht geändert werden, wiederholte Aufrufe immer gleiche Ergebnisse.
-
Meistens (nicht immer)
x.equals(y)
x.toString()
gleich mity.toString()
.hashCode()
vordefiniert: Ausschnitt aus Objekt-Referenz-Adresse, fast beliebige Zahl
Eigenschaften:
x.equals(y)
x.hashCode() == y.hashCode()
- Solange x nicht geändert wird, liefern wiederholte Aufrufe immer gleiche Ergebnisse.
-
unterschiedliche Objekte - möglichst unterschiedliche Ergebnisse - gelingt nicht immer: wenn
x.hashCode() == y.hashCode()
x.equals(y)
.getClass()
gibt dynamischen Typen
x instanceof y
Wenn x ein Untertyp (eine Instanz von) y ist