第一条 覆盖equals时请遵守通用规定
- 类的每个实例本质上都是一样的
- 不关心类是否提供了“逻辑相等”的测试功能
- 超类已经覆盖了equals,从超类继承过来的行为对于子类也是合适的
- 类是私有的或是包级私有的,可以确定它的equals方法永远不会被调用
- 五大性质
- 自反性
- 对称性
- 传递性
- 一致性
- 非空性
- 扩展
- 里氏替换原则
- 复合优于继承
- 实现高质量equals方法的诀窍
- 使用==操作符检查“参数是否为这个对象的引用”
- 使用instanceof操作符检查“参数是否为正确的类型”
- 把参数转换成正确的类型
- 对于该类中的每个“关键”域,检查参数中的域是否与该对象中对应的域相匹配(域就是属性)
- 当你编写完成了equals方法之后,应该问自己三个问题:它是否是对称的、传递的、一致的?
- 覆盖equals时总要覆盖hashCode
- 不要企图让equals方法过于智能
- 不要将equals声明中的Object对象替换为其他的类型