实现java.lang.Object.equals(Object)需要注意哪几点?

如果天下的对象,都只做直接的equals判断,那就相安无事了。可总有一些情况:

  • 对象置于容器(如hashSet)中,而后进行equals判断;
  • 对象与继承对象的子类间,进行equals判断;
  • ……

【1】定义了错误的equals方法签名

NO: public boolean euqals(Pointer o);

YES: public boolean equals(Object o);

【2】重载了equals的但没有同时重载hashCode的方法

NO: no hashCode()

YES:  public int hashCode() {   return (41 * (41 + getX()) + getY());    }

【3】建立在会变化字域上的equals定义

NO: public int a;

YES: public final int a;

【4】不满足等价关系的equals错误定义

NO: 直接父、子对象对比;

YES: && this.getClass().equals(that.getClass())

学习:

http://blog.csdn.net/haoel/article/details/4282239

http://www.artima.com/lejava/articles/equality.html

原文地址:https://www.cnblogs.com/alipayhutu/p/2498443.html