java为什么EnumMap为空值分配对象类对象?
我在研究Java EnumMap实现时发现,如果我将null值传递给EnumMap,EnumMap就会分配一个对象类对象来代替null值
EnumMap类中的代码:
public V put(K key, V value) {
typeCheck(key);
int index = key.ordinal();
Object oldValue = vals[index];
vals[index] = maskNull(value);
if (oldValue == null)
size++;
return unmaskNull(oldValue);
}
private Object maskNull(Object value) {
return (value == null ? NULL : value);
}
private static final Object NULL = new Object() {
public int hashCode() {
return 0;
}
public String toString() {
return "java.util.EnumMap.NULL";
}
};
我的问题是,为什么java会将一个对象替换为给给定的键直接赋值。java这样做有什么好处
# 1 楼答案
它允许区分从未添加到映射的键和添加了
null
值的键。你甚至可以在你引用的代码中看到这一点:如果
null
之前使用此键放入地图,oldValue
将是NULL
,并且大小不会更改