关于 equals 和 hashCode

主要是说一下 equals 和 hashcode

1.hashCode

  1. 此方法主要是用来支持 hash tables。比如 HashMap
  2. 要求在 equals 不改动的情况下,每次调用得到的 hashCode 必须是一致的。
  3. 两个对象 equals 相等,则 hashCode 也应该相等。
  4. equals 不相等,则不必要求 hashCode 一定不同,应尽量不同以保证高性能。
  5. 默认实现,通常是通过对象的内部地址转换为整数,所以大多数情况下 Object 定义的 hashCode 确实可以为不同的对象返回不同的整数。

2.equals

  1. 对于 non-null reference x ,满足 x.equals(x) return true。
  2. 对于 non-null reference x,y 满足 对称性 即:如果 x.equals(y) return true ,则 y.equals(x) 也会 return true 。
  3. 对于 non-null reference x,y,x 满足 传递性。即:如果 x.equals(y) return true 和 y.equals(z) return true,那么 x.equals(z) 也应该 return true 。
  4. 对于任何 non-null reference x,y,满足一致性,x.equals(y) 要是 true永远是true
  5. 对于任何 non-null reference x, x.equals(null) return false.
  6. 当重写 equals 方法是必须需要重写 hashCode,这样才能保证 equals 为true的两个对象的 hashCode也一样。(jre 中就有违背这条的类存在)
  7. equals 默认是比较的内存地址。所以默认情况下,当 equals 相等的时候,hashCode也是相等的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shengjk1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值