【问题标题】:In my Java program, I get NullPointerException in my HashMap even after initialising and putting values to the HashMap在我的 Java 程序中,即使在初始化并将值放入 HashMap 之后,我的 HashMap 中也会出现 NullPointerException
【发布时间】:2015-02-20 13:58:22
【问题描述】:

在我的 Java 程序中,即使在初始化并将值放入 HashMap 之后,我的 HashMap 中也会出现 NullPointerException。

    LinkedHashMap<Short,BigInteger> ft = new LinkedHashMap<Short,BigInteger>(5);

    ft.put( (short) 1, BigInteger.valueOf(A));
    ft.put( (short) 2, BigInteger.valueOf(B));
    System.out.println(ft.isEmpty());
    System.out.println(ft.get((short)1));
    System.out.println(ft.get((short)2));
    System.out.println(ft.containsKey(1));
    System.out.println(ft.containsValue(1));

【问题讨论】:

  • A 和 B 是在哪里创建的?
  • 你能显示产生的错误吗?
  • 哪里失败了?
  • 哪一行导致 NullPointerException ?
  • 当我用值替换 A 和 B 时,代码运行良好。我认为有问题。贴出创建 A 和 B 的代码...

标签: java hashmap biginteger short linkedhashmap


【解决方案1】:

如果AB 的类型为Long(或ShortInteger)并包含null,则说明异常(因为BigInteger.valueOf() 需要long,并且如果您将一些引用数字类型传递给它,它会将其拆箱为原始类型,如果Long/Integer/Shortnull,这将导致NullPointerException)。

我尝试将 A 和 B 替换为非 null 值并测试了您的代码,没有出现异常,所以一定是这样。

您可以将代码简化为:

BigInteger.valueOf(A);
BigInteger.valueOf(B);

仍然得到异常。

【讨论】:

  • A 和 B 是 Short 类型
  • @007alibabas 好吧,如果它们中的任何一个包含 null,同样的解释仍然适用。
【解决方案2】:

只要 A 和 B 不为空,它对我来说效果很好。如果它们为 null,您将收到 Nullpointerexception,因为您无法从 null 获取 BigInteger 值。

【讨论】:

  • 这不是一个真正的答案。为什么他们会得到 NullPointerException?
【解决方案3】:

查看代码,如果 A 或 B 的变量很可能是可以为 null 的 Long 类型。

即。

long A = 10;
Long B = null;

  LinkedHashMap<Short,BigInteger> ft = new LinkedHashMap<Short,BigInteger>(5);

    ft.put( (short) 1, BigInteger.valueOf(A));
    ft.put( (short) 2, BigInteger.valueOf(B));

上面会报错......

BigInteger.valueOf(...) 将成为空指针异常的原因。

问候 诺曼

【讨论】:

    猜你喜欢
    • 2022-12-06
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    相关资源
    最近更新 更多