来自 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)
有人可以帮助我理解这种行为吗?
这里的问题不在于哈希图,而在于将结果自动拆箱为原始布尔值。
用:
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.