equals为什么要验证getclass相不相等?
来源:14-3 Java中的 hashCode 方法
李爽爽爽爽
2018-09-25
老师您好,14-3的19分24秒,equals为什么要验证getclass相不相等?
写回答
1回答
-
如果类之间存在继承关系的话,没有getClass,equals函数所表达的逻辑可能是错误的。
以我们在这个课程中所写的学生类的equals为例:
@Override public boolean equals(Object o){ if(this == o) return true; if(o == null) return false; if(getClass() != o.getClass()) return false; Student another = (Student)o; return this.grade == another.grade && this.cls == another.cls && this.firstName.toLowerCase().equals(another.firstName.toLowerCase()) && this.lastName.toLowerCase().equals(another.lastName.toLowerCase()); }
设想一下,如果传来的o是Student的一个子类的,由于多态性,一切都是合法的(可以以Object的形式传进来,也可以被强制类型转化为Student)。并且,这个子类的各个字段可能都和当前的Student是一致的。但是,在你的业务逻辑中,他们可能并不是一致的,equals不应该改返回true:)
042019-08-21
相似问题