有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    它允许区分从未添加到映射的键和添加了null值的键。你甚至可以在你引用的代码中看到这一点:

    if (oldValue == null)
        size++;
    

    如果null之前使用此键放入地图,oldValue将是NULL,并且大小不会更改