You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么HashMap<Long, MYChainInformation>调用get(0)返回null,而get(0L)能获取到元素?

为什么HashMap<Long, MYChainInformation>调用get(0)返回null,而get(0L)能获取到元素?

这个问题的核心其实是Java的自动装箱机制+HashMap键的匹配规则在搞鬼,咱们一步步拆解开说:

首先,你的HashMap定义是HashMap<Long, MYChainInformation>,也就是说它的键类型是Long包装类。

当你调用get(0)的时候,这里的0是int基本类型,Java会自动把它装箱成Integer对象;而调用get(0L)的时候,0L是long基本类型,会自动装箱成Long对象。

接下来就是关键了:HashMap查找元素是依赖键的equals()方法和hashCode()方法的,只有当两个键的hashCode相等,并且equals()返回true的时候,才会认为是同一个键。

但Integer和Long是完全不同的类型,它们的equals()方法做了类型校验——只有当传入的对象也是同类型时才会比较值,否则直接返回false。比如你跑这段代码:

System.out.println(new Integer(0).equals(new Long(0L))); // 输出false

哪怕它们的哈希值碰巧相同(比如0的Integer和Long哈希值都是0),但equals()不通过,HashMap就找不到对应的元素,自然返回null。而get(0L)传入的是Long类型的键,和你HashMap里存储的键类型一致,值也匹配,所以能正常拿到对应的MYChainInformation对象。

简单总结就是:你存的是Long键,就得用Long类型的键去查,用Integer类型的键(哪怕值看起来一样)是匹配不上的。

备注:内容来源于stack exchange,提问作者DanialAbdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 09:49:51