5.23 重写equals方法作业(IDEA自动生成的)
Topic source老师,关于这里不建议比较class有疑惑。详见重写equals方法需要注意的几点 - 走看看 (zoukankan.com) 里面第三点传递性原则部分(同时也违反了对称性原则)的实例。
对于您说的具体的为什么不能比较class的原因还在了解中。这里只是提出来反例一起讨论。
用instanceof不合理啊,假设集合里存了一个父类一个子类(属性都一样),子类、父类都用instanceof判断重写equals
父类.equals(子类) 子类可以通过instanceof判断且属性值一样(赋一样的值) 返回true
子类.equals(父类) 父类不可以通过instanceof判断 返回false
这不就违反了对称性
使用Class比较,子类就是子类,父类就是父类,关系很明确也很合理,比较两个类是否相等,Class都不一样,那能叫一样吗(个人理解)
简洁版:
@Override
public boolean equals(Object o) {
if (o instanceof Person1 person1) {
return age == person1.age && Objects.equals(firstName, person1.firstName) && Objects.equals(lastName, person1.lastName);
}
return false;
}
- 1
ANGERIED