读书人

种继承关系中实现equals方法的一个细节

发布时间: 2012-12-22 12:05:06 作者: rapoo

类继承关系中实现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 昨天 确实应该注意这些细节方面的东西,否则在测试的时候测不出来,将来正式运行以后那造成的损失可就难以估计了

读书人网 >编程

热点推荐