Java对象,重写equals()方法后,还需重写hashCode()方法

java的Object类有方法boolean equals(Object obj),用于判断obj对象与此对象相等。

equals()方法是判断两个对象是否有等价关系(等价关系具有自反性、对称性、传递性):

  1. 自反性:对于任何非空’引用值‘x,x.equals(x)返回值为true。
  2. 对称性:对于任何非空非空’引用值‘x和y,有x.equals(y)为真,且y.equals(x)也为真。
  3. 传递性:对于任何非空非空’引用值‘x、y、z,如果x.equals(y)为真,且y.equals(z)为真,则有 x.equals(z)也为真。
  4. 一致性:对于任何非空非空’引用值‘x和y,多次调用x.equals(y)结果都一致,要么每次都为真,要么每次都为假。
  5. null的处理:对于任何非空’引用值‘x,x.equals(x)返回值为false。

通过对比以上的几种性质,才能最大可能保证两个对象是相等的。也就是说:对于任何非空非空’引用值‘x和y,当且仅当x和y指向同一个对象时(即:x==y为真),equals()方法返回值为true。

注意:当对象的equals()方法被重写后,也需要重写hashCode()方法,以保证hashCode()方法的基本性质——相等的对象哈希码相同,即:保证x.equals(y)为真,x和y相等,x和y的哈希码相同。

java的Object类有方法public int hashCode()方法,生成对象的哈希码。

hashCode()方法所需满足的基本性质是:

  1. 在某java应用的一次执行过程中,多次调用同一个对象的hashCode()方法,得到的是同一个哈希码。但两次执行同一个应用时,调用同一个对象的hashCode()方法,生成的哈希码可能不同。
  2. 如果两个对象x.equals(y)为true,则x.hashCode()和y.hashCode()生成的哈希码相同。
  3. 如果两个x.equals(y)为false,则x.hashCode()和y.hashCode()生成的哈希码可能相同,也可能不同(不是必须不同)。但为不同的对象生成不同的哈希码能够提高哈希表的效率。一般情况下,不同对象,生成的哈希码不同。

(From: Java文档)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值