-
我给一个类重写了 equals 判断两个对象内容相等,用它做 HashMap 的 key 存了又取,取出来的竟然永远是 null,我对着只重写 equals 不重写 hashCode 这个坑排查大半天的复盘
一个堪称 Java 面试必问、实战必踩的经典坑,隐蔽在它看起来天经地义:我明明定义了两个对象在什么情况下相等,HashMap 却像没看见一样固执地说找不到。需求是个缓存:有个坐标点类 Point,我希望只要 x、y 相同两个 Point 就算相等,用 Point 做 key 把计算结果缓存进 HashMap。为此我认真重写了 equals(x、y 相同就相等),但没重写 hashCode。结果 p…- 0
- 0
-
缓存命中率离奇趴在 0%:Java equals 与 hashCode 避坑
一个跑得好好的 Java 服务,某次我顺手看了眼缓存命中率监控,当场愣住:命中率常年趴在接近 0% 的地方,缓存等于白做,内存里那个缓存 map 倒越涨越大,光占地方不干活。打日志一比对更迷惑——两个 key 在日志里长得一模一样,map.get(key) 却就是返回 null。扒开那个作为 key 的自定义类,真相经典得让我有点不好意思:它重写了 equals 让业务上相等的对象被判相等,却偏偏…- 0
- 0
对象相等性
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!


