Why EnumMap assign a Object class object for null values?

1.6k Views Asked by At

I was looking into Java EnumMap implementation and found that if I pass null value to EnumMap, EnumMap assign a Object class object in place of just null Value.

Code from EnumMap Class:

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";
            }
   };

My question is why java place a object in place of direct assigning a null value to given key. What kind of benefit java gets doing so.

1

There are 1 best solutions below

2
On BEST ANSWER

It allows to distinguish between keys which were never added to the map and ones that were added with null value. You can see this even in the code you quoted:

if (oldValue == null)
    size++;

If null was previously put into the map with this key, oldValue will be NULL and the size will not be changed.