3

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

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

2 回答 2

3

它是 openjdk 实现中的一个错误。考虑这个链接

理想情况下,它应该只给出 false 参见这个 1.7 SE

它说 Returns: true 如果此映射将一个或多个键映射到此值

对我来说,它false的付出 - 在 JRE1.7.0_55 上运行

于 2015-02-26T08:51:37.867 回答
2

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

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

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

于 2015-02-26T08:51:39.267 回答