EnumMap.containsValue(空)returns 真 JDK 7

EnumMap.containsValue(null) returns true JDK 7

我发现了一个奇怪的行为。我正在使用 JDK 1.7。 当我打印 map.containsValue(null)

它 returns true 尽管我的 MAP 中没有任何空值。

import java.util.EnumMap;
import java.util.Map;

public class EnumMapTest {
    enum EnumType {
        ZERO, ONE, TWO
    }

    public static void main(String[] args) {
        Map<EnumType, Integer> map = new EnumMap<EnumType, Integer>(EnumType.class);
        map.put(EnumType.ZERO, 0);
        System.out.println(map.containsValue(null));
    }
}

这是 openjdk 实现中的一个错误。 Consider this link

理想情况下应该只给出 false See this 1.7 SE

它说 Returns:如果此映射将一个或多个键映射到此值,则为真

对我来说,它在 JRE1.7 上提供 false - 运行。0_55

这是因为它会检查所有可能键的所有值。你的情况

map.get(ONE) is null
map.get(TWO) is null

在 Java 8 中它不会这样做。而是区分未设置的 null 和设置为 null 的 NULL