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

Jok*_*ker 1 java hashmap

来自 java 文档 Map

返回指定键映射到的值,如果此映射不包含键的映射,则返回 null。

但是下面的代码正在抛出Null Pointer exception.

public class Main {
    public static void main(String args[]) throws Exception {
        boolean bool = false;
        Map<String, Boolean> map = new HashMap<>();
        boolean r = bool ? false : map.get("a");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Gre*_*pff 9

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

用:

    Map<String, Boolean> map = new HashMap<>();
    Boolean r = map.get("a");
Run Code Online (Sandbox Code Playgroud)

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

正如所MadaManu指出的那样,请注意rcan be null,这会让您的代码读者感到非常惊讶。您可能更喜欢使用:

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

...如果您希望将丢失的密钥视为与false.