Object类的equals方法与hashcode方法分析

本文详细解析了Java中Object类的equals方法与hashCode方法的工作原理及其实现细节,阐述了两者之间的关系及其在实际开发中的应用。

Object类的equals方法与hashcode方法分析

equals

源代码

public boolean equals(Object obj) {
   return (this == obj);
}

概述

指示其他对象是否等同于这个对象。
equals方法在非空对象引用上实现等价关系:

  • 自反性:对于任意非空引用值x,x.equals(x)会返回true
  • 对称性:对于任意非空引用值x和y, x.equals(y)返回true, y.equals(x)也返回true
  • 传递性:对于任意非空引用值x,y和z,如果x.equals(y)返回true, 且y.equals(z)返回true, 那么x.equals(z)也返回true
  • 一致性:对于任意非空引用值x和y, 多次调用x.equals(y),要么一致的返回true,要么一致的返回false
  • 对于任意非空引用值x,x.equals(null)返回false。

Object类的equals()方法在对象比较上实现最为可能性的等同关系。即,对于任意对于任意非空引用值x和y,当且仅当x和y引用同一个对象时(x == y返回true)返回true。

注意,每当equals()被重写时,hashCode()方法也需要被重写。所以为了维护hashCode()方法的契约,以equals()方法声明的相同对象必须拥有相同的哈希码(散列值)

hashCode

源代码

public native int hashCode();

概述

返回一个对象的哈希码。这个方法支持哈希表的好外,例如HashMap

hashCode的契约如下:
1. 每当在Java应用程序的执行过程中多次调用这个方法时,hashCode方法必须返回相同的整数。在对象的equals比较中没有提供任何信息被修改。在一个应用程序的执行过程到相同程序的另一个执行过程中,这个整数不需要保持一致。
2. 如果两个对象通过equals(Object)方法比较结果相等,那么在两个对象上调用hashCode方法生成的哈希码必须相同。
3. 如果两个对象通过equals(Object)方法比较结果不相等,那么在两个对象上调用hashCode方法生成的哈希码也没有必要相同。但是,程序员应该知道,为不相等的对象生成不同的整数结果可以提高哈希表的性能。

只要是合理可行的,通过Object类定义的hashCode方法会为不同的对象生成不同的哈希码。(这通常通过把一个对象的内存地址转换成一个哈希码来实现,但是这种实现技术并不需要是由Java语言来实现)

参考链接:
https://docs.oracle.com/javase/8/docs/api/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值