使用 HashMap 的 put 方法时出现 NullPointerException

NullPointerException while using put method of HashMap

提问人:Ankur 提问时间:4/10/2009 最后编辑:EddieAnkur 更新时间:2/10/2021 访问量:53852

问:

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

... 
dataMap.put(nextLine[0], nextLine[6]);

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

HashMap<String, String> 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;
}
Java 哈希图 NullPointerException

评论

0赞 2/10/2021
我只是想知道这样一个微不足道的新手编码问题的“24”点

答:

5赞 Brian Agnew 4/10/2009 #1

数据映射在哪里初始化?它始终为 null。

为了清楚起见,请声明变量并将其设置为 null。但是你需要实例化一个新的 Map,无论是 HashMap 还是类似的。

例如

datamap = new HashMap();

(撇开泛型等)

评论

0赞 Apocalisp 4/10/2009
是的,取消引用显式为 null 的指针会引发 NullPointerException,这很奇怪。
3赞 Sheldon 4/10/2009 #2

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

数据映射 = new HashMap();

1赞 jcopenha 4/10/2009 #3

嗯,在那条线上有三个对象被访问。如果 nextLine[0] 和 nextLine[6] 不为 null,因为上面的 println 调用有效,那么剩下的就是 dataMap。你做了吗 dataMap = new HashMap();索姆韦赫?

47赞 Codingscape 4/10/2009 #4
HashMap<String, String> dataMap = new HashMap<String,String>();

此时变量尚未初始化。您应该收到有关此的编译器警告。dataMap

评论

0赞 Brian Agnew 4/10/2009
问题真的不是它被显式初始化了吗?要 null ?
0赞 matt b 4/10/2009
我认为 Codingscape 的意思是说“未实例化”
1赞 Bill K 4/10/2009
实际上,这里有一个提示。他没有收到警告,因为他将其初始化为 null 以覆盖他肯定收到的编译器警告。默认情况下,您应该养成不要将变量初始化为“中性”值的习惯,而只将它们设置为实际值,以便编译器发出警告。
-1赞 Michael Borgwardt 4/10/2009 #5

嗯,当你这样做时,你到底期望什么?

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

评论

2赞 Ankur 4/10/2009
我原以为 null 是一种占位符,但是当您使用 put 时,值为“put”,使 HashMap 不再等于 null
0赞 mP. 4/10/2009
如果 put =null everywhere 我的程序会自己写吗?
0赞 2/10/2021
...为什么这里有一个减分?我开始怀疑 Stackoverflow 社区的客观性。
0赞 SaadurRehman 2/10/2021 #6

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

HashMap<String, Integer> map = new HashMap<String, Integer>();

哪个是空的或除了“someKey”之外有键,所以当我尝试

map.get("someKey") == 0;

现在,由于将 null 与某个整数匹配,这将产生一个 nullPointerExeption。

我该怎么办?

答:我应该检查null like

map.get("someKey") != null;

现在运行时错误 Nullpointer 不会引发!