Java HashMap get method null pointer exception

2022-09-01 14:52:13

我的代码类似于以下内容:

public class A {
        private HashMap<Character, Boolean> myMap;

        public A() {
            myMap = new HashMap<Character, Boolean>();
            String mychars = "asdfzxcvqwer";
            for (char c : mychars.toCharArray())
                myMap.put(c, true);
        }

        public void doo(String input) {
            StringBuilder output = new StringBuilder();
            for (char c : input.toCharArray()) {
                if (myMap.get(c))
                    output.append(c);
            }
        }
        //...
        //...
    }

为什么我在行中出现空指针异常 (NPE)?if (myMap.get(c))


答案 1

如果 不包含 在 中,它将返回 ,无法将其作为 拆箱。cmyMapnullboolean

尝试:

Boolean b = myMap.get(c);
if(b != null && b){
...

答案 2

如果 不包含匹配的键,则将返回 null。在这种情况下,当 JVM 将它期望的对象解箱到一个原语中以执行条件时,它会找到一个 null 对象,因此会抛出一个 .myMapcmyMap.get(c)java.lang.Booleanbooleanjava.lang.NullPointerException

以下块等效于示例中的内容,应该可以更轻松地理解为什么会有:NullPointerException

if (((Boolean) myMap.get(c)).booleanValue()) 

我会把你的原始状态改写为:

if ( myMap.containsKey(c) )

我希望这有帮助。