随笔录--Java之hashCode 和 equals 方法

本文阐述Java中hashCode和equals的核心功能,以及它们在哈希表和对象相等性判定中的作用,强调equals方法重写的重要性。
摘要由CSDN通过智能技术生成

官方解析

在 Java 中,hashCode 和 equals 方法都是 Object 类的方法。它们的作用分别如下:

  • hashCode 方法返回对象的哈希码,用于支持基于哈希表的集合,如 HashMap、HashSet 等。如果两个对象的 equals 方法返回 true,则它们的 hashCode 方法必须返回相同的值,反之则不需要。

  • equals 方法用于比较对象是否相等。默认情况下,equals 方法使用的是 == 操作符,即只有两个对象引用指向同一个对象时才会返回 true。但是,大部分情况下,我们需要重写 equals 方法来实现自己定义的相等规则。

两者之间的区别在于,hashCode 方法返回的是一个 int 类型的数值,而 equals 方法返回的是一个 boolean 类型的值。

hashCode 方法用于快速比较两个对象是否不同,因为如果它们的哈希码不同,那么它们肯定不相等。equals 方法则用于判断两个对象是否真正相等,这个判断比较复杂,需要根据对象的实际情况来定义。

另外,需要注意的是,== 操作符用于比较两个对象的引用是否相等,即它们是否指向同一个对象。而 equals 方法则用于比较两个对象的值是否相等。

在 Java 中,对象的值比较往往需要根据对象的实际情况来定义,因此一般需要重写 equals 方法。

 

图片

hashCode和equals方法是Object类的两个重要方法,用于判断对象的相等性和生成对象的哈希值。

hashCode:

  • 可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。

== :

== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是 指相同一个对象。比较的是真正意义上的指针操作。

  1. 比较的是操作符两端的操作数是否是同一个对象。

  2. 两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。

  3. 比较的是地址

equals:

equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以 适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的 equals方法返回的却是==的判断。

总结:

  • 如果两个对象equals相同,hashCode一定相同

  • 如果两个对象equals不同,hashCode不一定不同

  • 如果两个对象的hashCode相同,它们的equals并不一定相同

  • 如果两个对象的hashCode不相同,它们的equals一定不相同

所有比较是否相等时,都是用equals ,并且在对常量相比较时,把常量写在前面,因为使用object的 equals object可能为null 则空指针 在阿里的代码规范中只使用equals ,阿里插件默认会识别,并可以快速修改,推荐安装阿里插件来排 查老代码使用“==”,替换成equals

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值