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
。
我发现了一个奇怪的行为。我正在使用 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
。