代码改变世界

适时覆盖equals,覆盖equals是要覆盖hasdCode

2018-10-24 14:55  摘花  阅读(341)  评论(0编辑  收藏  举报

符合以下情况是不需要覆盖equals的:

  1. 类的对象本质都是唯一的,不需要逻辑上的判断是否相等。
  2. 超类的equals判断试用子类,子类无需写自己的equals
  3. 其他不需要的情况

需要覆盖equals的类只有一种情况,我们关心的是对象里面的值,这个类有自己本身的‘值’相等逻辑,此时我们需要去覆盖equals,而且应遵守下列原则:

  • 自反
  • 对称
  • 传递
  • 一致
  • 非NULL 对象和NULL作比较时,返回NULL

 

为了避免在覆盖让equals之后使用Java本身的容器类发生错误,我们必须在覆盖equals的同时,覆盖hashCode。否则去比对对象的散列值时,就会发生预期之外的错误。