02_值相同、类型不同,用 equals() 比较为什么是 false?
02_值相同、类型不同,用 equals() 比较为什么是 false?
场景示例
Map<Long, String> map;
Integer keyWord = 4;
if (map.containsKey(keyWord)) {// ...
}
结果:
→ 编译通过,但 containsKey 返回 false,逻辑错误。
过程图解 🎯
传入 keyWord (类型 Integer)↓Map 内部 containsKey(Object key)↓调用 Long.equals(Object obj)↓if (obj instanceof Long) // 判断类型是不是 Long- 是:继续比较数值- 否:直接返回 false
🚫 因为 keyWord 是 Integer,不是 Long,直接返回 false!
详细源码(Long.equals)
@Override
public boolean equals(Object obj) {if (obj instanceof Long) {return value == ((Long)obj).longValue();}return false;
}
简单版总结
| 步骤 | 内容 | 结果 |
|---|---|---|
| 类型判断 | obj instanceof Long | 否 |
| 比较数值 | 不执行 | — |
| 返回结果 | false |
为什么数值一样也不行?📌
虽然:
4是Integer4L是Long- 数值看起来一样
但 类型不同,equals 要求类型也必须一样,否则直接返回 false!
总结一句话 🎯
equals() 比较时,类型必须相同,数值必须相同,才能返回 true。
否则,即使值相同也没用!
