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

In my Java program, I get NullPointerException in my HashMap even after initialising and putting values to the HashMap

在我的 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));

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

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

您可以将代码缩减为:

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

仍然得到异常。

只要 A 和 B 不为空,我就可以正常工作。如果它们为 null,您将得到 Nullpointerexception,因为您无法从 null 中获取 BigInteger 值。

查看代码,您的 A 或 B 变量是否可能是 Long 类型,可能为 null。

即。

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(...) 将成为空指针异常的原因。

问候 诺曼