Klasse A { }
Klasse B erweitert A { }
Objekt o1 = neues A();
Objekt o2 = neues B();
o1 Instanz von A => wahr
o1 Instanz von B => falsch
o2 Instanz von A => true // <================ HIER
o2-Instanz von B => wahr
o1.getClass().equals(A.class) => true
o1.getClass().equals(B.class) => false
o2.getClass().equals(A.class) => false // <===============HIER
o2.getClass().equals(B.class) => true
getClass() ist nützlich, wenn Sie sicherstellen möchten, dass Ihre Instanz KEINE Unterklasse der Klasse ist, mit der Sie vergleichen.
一个非常完美的equals方法的写法:
// muss false zurückgeben, wenn der explizite Parameter null ist
if (otherObject == null) return false;
// Wenn die Klassen nicht übereinstimmen, können sie nicht gleich sein
if (getClass() != otherObject.getClass()) return false;
// Jetzt wissen wir, dass otherObject ein Mitarbeiter ungleich Null ist
Employee other = (Employee) otherObject;
// testen, ob die Felder identische Werte haben
return name.equals(other.name) && Salary == other.salary && HireDay.equals(other.hireDay);
}