符合以下情况是不需要覆盖equals的:
- 类的对象本质都是唯一的,不需要逻辑上的判断是否相等。
- 超类的equals判断试用子类,子类无需写自己的equals
- 其他不需要的情况
需要覆盖equals的类只有一种情况,我们关心的是对象里面的值,这个类有自己本身的‘值’相等逻辑,此时我们需要去覆盖equals,而且应遵守下列原则:
- 自反
- 对称
- 传递
- 一致
- 非NULL 对象和NULL作比较时,返回NULL
为了避免在覆盖让equals之后使用Java本身的容器类发生错误,我们必须在覆盖equals的同时,覆盖hashCode。否则去比对对象的散列值时,就会发生预期之外的错误。