Java HashMap.containsKey() 不调用 equals()

2022-09-01 15:15:31

我有一个哈希映射:

Map<LotWaferBean, File> hm = new HashMap<LotWaferBean, File>();

LotWaferBean lw = new LotWaferBean();
... //populate lw
if (!hm.containsKey((LotWaferBean) lw)) {
  hm.put(lw, triggerFiles[l]);
}

的代码:LotWaferBean

@Override
public boolean equals(Object o) {
        if (!(o instanceof LotWaferBean)) {
              return false;
        }
        if (((LotWaferBean) o).getLotId().equals(lotId)
                    && ((LotWaferBean) o).getWaferNo() == waferNo) {
              return true;
        }
        return false;
  }

在我的IDE中,我放入断点,但它永远不会执行。为什么?equals()


答案 1

尝试在 hashCode() 中放置一个断点。

如果映射中两个对象的 hashCode() 返回相同的数字,则将调用 equals 以确定它们是否真的相等。


答案 2

JVM 检查该对象的哈希码桶,如果有更多对象具有相同的哈希码,则仅执行 equals() 方法。而且,开发人员应该遵循hashCode()和equals()方法之间的正确契约。


推荐