我有两个哈希图
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 许可协议
如果您通过
get()
请求的密钥不在Map
中,则您显示的两个循环都会抛出NullPointerException
(NPE)。Map.get()
返回null
当密钥不存在时(或者当然,如果与该密钥一起存储的值是null
)。Integer
(自动装箱类型)即null
不能自动拆箱到int
NPE 中。执行此操作的安全方法是:
当然,也完全有可能您的收藏中有一个
Item
null
而 这 就是抛出 NPE 的原因。