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
是Integer
4L
是Long
- 数值看起来一样
但 类型不同,equals
要求类型也必须一样,否则直接返回 false
!
总结一句话 🎯
equals() 比较时,类型必须相同,数值必须相同,才能返回 true。
否则,即使值相同也没用!