栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Hashcode(),equals(),==的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hashcode(),equals(),==的区别

== 存在两种使用情况:
对于基本数据类型来说, 比较的是值是否相等。
对于引用数据类型来说, 比较的是内存地址是否相同。

equals()也存在两种使用情况:
情况 1:重写了 equals() 方法。一般来说,我们都会重写 equals() 方法来判断两个对象的内容是否相等,比如在 String 类【例如s[0].equals(“xxx”)表示一个字符串数组中的第一位对象的内容比较】
情况 2:没有重写 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过 == 比较这两个对象(比较的是地址)。

hashCode()方法返回的是哈希码:
实际上就是一个Java对象的内存地址,经过哈希算法,得出的一个值。若对比的是两个不同引用地址的对象,则会输出false。

拓展:
为什么在HashMap中要找到两个相同对象的时候需要重写equals方法同时重写hashcode?

首先我们需要理解hashmap的底层原理,在JDK1.8后,hashmap由数组和链表/红黑树组成。一个hashmap中相同index值的对象会存放在同一个链表中,当链表长度超过8时,引入红黑树的概念进行简化。如下图所示,引用自微信公众号:路人zhang。

因为首先如果我们不重写 hashCode(),那么任何对象的 hashCode() 值都不会相等。总体来说,HashMap 中get(key) 一个元素的过程是这样的,先比较 key 的 hashcode() 是否相等,若相等再通过 equals() 比较其值,若 equals() 相等则认为他们是相等的。若 equals() 不相等则认为他们不相等。
因此必须设计好一个hashcode值来得到index一组。(其实可以理解为核酸混采形成“桶”的概念来加快查找速度)然后再在组中进行重写的equals对相同的对象进行对比。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/759266.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号