【问题标题】:EnumMap.containsValue(null) returns true JDK 7EnumMap.containsValue(null) 返回真 JDK 7
【发布时间】:2015-02-26 08:42:44
【问题描述】:

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

【问题讨论】:

  • 这个例子我错了。 JDK 1.7.0_60 32 位 Windows 8.1
  • 在 Java SE Development Kit 7u2 上试用

标签: java enum-map


【解决方案1】:

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

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

如果此映射将一个或多个键映射到此值,则返回:true

对我来说,它给了false - 在 JRE1.7.0_55 上运行

【讨论】:

  • 在 Java SE Development Kit 7u2 上试用
  • 我认为这是正确的答案,因为它显然取决于错误版本。
【解决方案2】:

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

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

在 Java 8 中它不这样做。而是将null 与未设置的NULL 区分开来,NULL 是一个设置为 null 的值。

【讨论】:

  • Thanx @Peter Lawrey 是的,我安装了 Java 8,但它不是...可重现的:)
  • @show_stopper 我怀疑这是处理边缘情况的错误。
猜你喜欢
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2015-01-29
相关资源
最近更新 更多