类继承关系中实现equals方法的一个细节
equals方法
? ? ? ? 书上说,我们要比较两个对象是否相等的时候需要定义equals()和hashCode()两个方法。equals方法的完整签名是:equals(Object o). 定义equals方法的过程无非以下几个步骤:
1. 比较传进来的对象是否为空,如果空则返回false。
2. 比较传进来的对象类型是否相同,不同则返回false.
3. 再根据定义的对象比较每个字段是否相等,不等则返回false.
?
我们都知道,equals()方法意味着一种可传递和交换的对等关系,也就是说,假如A.equals(B)的结果为true的话,那么B.equals(A)的结果也是true.
? ? ? 如果引入了类继承关系的时候,子类需要定义同样的方法时可以重用父类的方法,只针对自己的部分进行修改。但是在稍微不注意的情况下可能会打破前面的这种假定。
继承关系的一个实现? ? ? ? 在不考虑hashCode方法的情况下,下面是一个包含父类和子类的equals实现:
?
?
?如果我们运行上面的代码,会发现一个比较奇怪的结果:
?
运行结果如下:
![]()
+1 equals 方法和hashcode实际上是为业务逻辑规定的对比方法,没必要死磕每个字段,你完全可以自定义任意规则!! 6 楼 商人shang 昨天 确实应该注意这些细节方面的东西,否则在测试的时候测不出来,将来正式运行以后那造成的损失可就难以估计了