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
@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。
否则,即使值相同也没用!