Java HashMap获取方法空指针异常

14 java hashmap nullpointerexception

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

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 doo(String input)
  {
    StringBuilder output = new StringBuilder();
    for ( char c : input.toCharArray() )
    {
      if ( myMap.get(c) )
         output.append(c);
    }
  }
  ...
  ...
}
Run Code Online (Sandbox Code Playgroud)

我在行上得到一个空指针异常if ( myMap.get(c) )- 我做错了什么?

xle*_*ier 46

如果c未包含myMap,则返回null,不能取消装箱boolean.

试试:

Boolean b = myMap.get(c);
if(b != null && b){
...
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案.另外,`HashMap myMap <Character,Boolean>`是一个语法错误(应该是`HashMap <Character,Boolean> myMap`),你不能命名方法`do`. (3认同)

小智 12

如果myMap不包含匹配的键c,则myMap.get(c)返回null.在这种情况下,当JVM将它期望成为java.lang.Boolean对象的对象拆分为boolean基元以执行条件时,它会找到一个空对象,因此抛出一个java.lang.NullPointerException.

以下块与您的示例中的内容相同,并且应该更容易理解为什么您将拥有NullPointerException:

if (((Boolean) myMap.get(c)).booleanValue()) 
Run Code Online (Sandbox Code Playgroud)

我会重新写下你的原始条件:

if ( myMap.containsKey(c) )
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.


小智 6

更改

if ( myMap.get(c) )
Run Code Online (Sandbox Code Playgroud)

if ( myMap.containsKey(c) && myMap.get(c))
Run Code Online (Sandbox Code Playgroud)