如果天下的对象,都只做直接的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())
学习: