EnumMap.containsValue(null)返回true J​​DK 7

时间:2015-02-26 08:42:45

标签: java enum-map

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

虽然我的MAP中没有任何空值,但它会返回true

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

2 个答案:

答案 0 :(得分:3)

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

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

它表示返回:如果此映射将一个或多个键映射到此值

,则返回true

对我而言,给予false - 在JRE1.7.0_55上运行

答案 1 :(得分:2)

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

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

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