Java 使用HashMap的put方法时出现NullPointerException

Java 使用HashMap的put方法时出现NullPointerException,java,hashmap,nullpointerexception,Java,Hashmap,Nullpointerexception,下面的代码给了我一个NullPointerException。问题出现在以下行中: ... dataMap.put(nextLine[0], nextLine[6]); 奇怪的是,我在没有上述代码行的情况下运行了这段代码,并且对nextLine[0]和nextLine[6]的调用完全按照预期工作-也就是说,它们会返回csv文件的元素。我声明并用代码初始化HashMap HashMap<String, String> dataMap = null; HashMap-dataMap

下面的代码给了我一个
NullPointerException
。问题出现在以下行中:

... 
dataMap.put(nextLine[0], nextLine[6]);
奇怪的是,我在没有上述代码行的情况下运行了这段代码,并且对
nextLine[0]
nextLine[6]
的调用完全按照预期工作-也就是说,它们会返回csv文件的元素。我声明并用代码初始化
HashMap

HashMap<String, String> dataMap = null;
HashMap-dataMap=null;
早期的方法

  String[] nextLine;
  int counter=0;
  while (counter<40) {
    counter++;

    System.out.println(counter);
    nextLine = reader.readNext(); 
    // nextLine[] is an array of values from the line
    System.out.println(nextLine[0] + " - " + nextLine[6] +" - " + "etc...");
    dataMap.put(nextLine[0], nextLine[6]);
  }
  return dataMap;
}
String[]下一行;
int计数器=0;

while(counter数据映射在哪里初始化?它总是空的

为了澄清这一点,您需要声明变量并将其设置为null。但是您需要实例化一个新映射,无论它是HashMap还是类似的映射

e、 g


(撇开泛型等不谈)

dataMap已声明但未初始化。可以使用


datamap=new HashMap();

好的,在那一行上访问了三个对象。如果nextLine[0]和nextLine[6]不为null,因为上面的println调用有效,那么就剩下datamap。您是否执行了datamap=new HashMap();somwehere?

HashMap datamap=new HashMap();
HashMap<String, String> dataMap = new HashMap<String,String>();

此时未初始化您的
dataMap
变量。您应该会收到一条编译器警告。

嗯,当您执行此操作时,您希望做什么

HashMap<String, String> dataMap = null;
...
dataMap.put(...)
HashMap-dataMap=null;
...
dataMap.put(…)

我的情况与往常不同,hashmaps在尝试读取不存在的键时抛出空指针异常,例如我有一个

HashMap-map=newhashmap();

它是空的,或者除了“someKey”之外还有其他键,所以当我尝试

map.get(“someKey”)==0;

现在,由于将null与某个整数匹配,这将生成一个NullPointerExection

我该怎么做呢

Ans:我应该检查空值,比如

map.get(“someKey”)!=null;


现在运行时错误Nullpointer不会出现!

是的,非常奇怪的是,取消引用显式为null的指针会引发NullPointerException。我原以为null是一种占位符,但使用put时,值为“put”让HashMap不再等于nullIf put=null我的程序会自己写吗?…为什么这里有一个负号?我开始怀疑Stackoverflow社区的客观性。问题真的不是它被显式初始化了吗?为null?我认为Codingscape的意思是说“没有实例化”实际上,这里有一个提示。他没有得到警告,因为他将其初始化为null以覆盖他肯定得到的编译器警告。你应该养成一个习惯,默认情况下不要将变量初始化为“中立”值,只将它们设置为实值,这样编译器就可以发出警告。我只是想知道“24”这类琐碎的新手编码问题的要点
HashMap<String, String> dataMap = null;
...
dataMap.put(...)