点击上方☝
Java编程技术乐园,轻松关注!
及时获取有趣有料的技术文章
做一个积极的人编码、改bug、提升自己
我有一个乐园,面向编程,春暖花开!
作者:Icharle
https://icharle.com/hashmapkebianobj.html
前言
在 Java 道路上越踩越多坑,最近被问到一个知识点,当对象作为 HashMap 一个 key 时,在未重写equals和hashcode方法时候,get方法返回的值为null。
分析
在下面一段代码中,未重写 equals 以及 hashCode 方法情况下,输出结果为null。
改造后代码:
原因分析
HashMap 在查找某一个 key 时,先是用 hashCode 函数根据该 key 的地址计算,再用 equals 函数根据对象的地址进行比较。
在代码片段一中 : map.put(new People("icharle"), 18); 以及System.out.println(map.get(new People("icharle")));中默认是两个对象 (也就是说两个对象的地址不一样,自然 hashcode 函数得到的值是不一样 (因为两个的对象的地址不同,自然在 equals 时候更不可能相等,最终得到的结果为 null。
在代码片段二中:重载hashCode()函数的作用是:对于同一个 key,得到相同的 hash 值,重载equals()函数的作用是:向HashMap表明当前对象和 key 上所保存的对象是相等的。因此该情况下最终结果为 18
往期精彩回顾
欢迎长按下图关注公众号
后台回复【资源】,获取珍藏干货!
99.9%的伙伴都很喜欢
朕已阅