HashMap抛出不需要的Null指针异常

时间:2020-01-06 06:51:00

标签: java hashmap

来自Actions actions = new Actions(driver); WebElement element = driver.findElement(By.linkText("host")); actions.moveToElement(element).build().perform(); 的Java文档

返回指定键所映射的值;如果返回,则返回null 该映射不包含密钥的映射。

但是以下代码抛出了Map

Null Pointer exception

有人可以帮助我了解这种行为吗?

3 个答案:

答案 0 :(得分:9)

这里的问题不在于哈希图,而在于将结果自动拆箱为原始布尔值。

使用:

    Map<String, Boolean> map = new HashMap<>();
    Boolean r = map.get("a");

请注意,r是一个“大b” Boolean包装对象,而不是原始的boolean

正如MadaManu所指出的那样,请注意r可以是null,这对于您的代码读者来说可能是非常令人惊讶的。您可能想使用:

    Map<String, Boolean> map = new HashMap<>();
    boolean r = map.getOrDefault("a", false);

...如果希望将丢失的密钥与false相同。

答案 1 :(得分:4)

get返回null,因为映射为空。尝试将{“ unbox”)null转换为原始布尔值以使三元表达式具有与NullPointerException对齐的原始布尔值时,发生false

甚至从未尝试进行分配,因此这无关紧要。

答案 2 :(得分:1)

来自JLS 5.1.8. Unboxing Conversion

如果r为null,则取消装箱转换将引发NullPointerException

在您的情况下,map.get("a")返回null,然后取消装箱将引发此异常。

您可以使用布尔值来解决:

Boolean r = map.get("a");
// here r will be null.
相关问题