我发现了一种奇怪的行为。我正在使用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));
}
}
答案 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
。