Hashmap get 返回 null

新手上路,请多包涵

我有两个哈希图

HashMap<Integer, Integer> inventoryRequirements = new HashMap<Integer, Integer>();
HashMap<Integer, Integer> inventory = new HashMap<Integer, Integer>();

我有一个循环检查当前并添加到它:

 for(Item item : items){
    int currentRequirement = 0;
    currentRequirement = inventoryRequirements.get(item.get_id());
    inventoryRequirements.put(item.get_id(), currentRequirement++);
}

我有另一个循环检查库存并添加到它:

 for(Item item : items){
    int currentInventory = 0;
    // this next line returns null
    currentInventory = inventory.get(item.get_id());
    inventory.put(item.get_id(), currentInventory++);
}

第一个工作正常,但第二个会呕吐并返回空值。我不明白为什么第二个不起作用。两者最初都处于代码示例中描述的相同状态。

编辑

正如您在此处看到的那样,两个 HM 得到了填充 - 真的!我知道这可能很难相信,但第一个有效而第二个无效。

原文由 Roy Hinkley 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

如果您通过 get() 请求的密钥不在 Map 中,则您显示的两个循环都会抛出 NullPointerException (NPE)。

Map.get() 返回 null 当密钥不存在时(或者当然,如果与该密钥一起存储的值是 null )。 Integer (自动装箱类型)即 null 不能自动拆箱到 int NPE 中。

执行此操作的安全方法是:

 for (Item item : items) {
    Integer currentRequirement = inventoryRequirements.get(item.get_id());
    if (currentRequirement != null) {
        inventoryRequirements.put(item.get_id(), currentRequirement++);
    }
}

当然,也完全有可能您的收藏中有一个 Item null 就是抛出 NPE 的原因。

原文由 Brian Roach 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏