A类{}
B 类扩展 A { }
对象 o1 = new A();
对象 o2 = new B();
o1 A实例 => true
o1 instanceof B => false
o2 instanceof A => true // <================ 这里
o2 instanceof B => true
o1.getClass().equals(A.class) => true
o1.getClass().equals(B.class) => false
o2.getClass().equals(A.class) => false // <================此处
o2.getClass().equals(B.class) => true
当您想确保您的实例不是您正在比较的类的子类时,getClass() 将很有用。
一个非常完美的等于方法的写法:
// 如果显式参数为 null 则必须返回 false
if (otherObject == null) 返回 false;
// 如果类不匹配,则它们不能相等
if (getClass() != otherObject.getClass()) 返回 false;
// 现在我们知道 otherObject 是一个非空 Employee
员工其他 = (员工) otherObject;
// 测试字段值是否相同
return name.equals(other.name) && 工资 == other.salary && HireDay.equals(other.hireDay);
}