Java equal 和 hashcode

1、public boolean equals​(Object obj)

指示某个其他对象是否“等于”这个对象。
equals方法实现了非空对象引用的等价关系:

  • It is reflexive(反身的):对于任何非空的引用值x, x.equals(x)应该返回true。
  • 对称性(symmetric):对于任何非空的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)返回true。
  • 传递性(transitive):对于任何非空的引用值x、y和z,如果x.equals(y)返回true,而y.equals(z)返回true,那么x.equals(z)应该返回true。
  • 一致性(consistent):对于任何非空引用值x和y,如果未修改对象的equals比较中使用的信息,则多次调用x.equals(y)始终返回true或始终返回false。
  • 对于任何非空的引用值x, x.equals(null)应该返回false。

类对象的equals方法实现了对对象尽可能区别的等价关系;也就是说,对于任何非空的参考值x和y,当且仅当x和y指向相同的对象时,该方法返回true (x == y的值为true)。

请注意,通常需要在重写hashCode方法时重写该方法,以便维护hashCode方法的常规契约,该契约规定相等的对象必须具有相等的hash code。

2、public int hashCode()

返回对象的哈希码值。支持此方法的好处是可以使用HashMap提供的散列表
hashcode 的一般规约:

  • 在Java应用程序的执行过程中,无论何时在同一个对象上多次调用它,hashCode方法都必须一致地返回相同的整数,前提是不对对象上的equals比较中使用的信息进行修改。此整数不需要在应用程序的一次执行与同一应用程序的另一次执行之间保持一致。
  • 如果根据equals(Object)方法,两个对象是相等的,那么在每个对象上调用hashCode方法必须产生相同的整数结果。
  • 如果两个对象根据equals(java.lang.Object)方法是不相等的,那么不一定在每个对象上调用hashCode方法必须产生不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同的整数结果可能会提高哈希表的性能。
    在合理的实践范围内,类对象定义的hashCode方法为不同的对象返回不同的整数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值