27

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

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

奇怪的是,我在没有上述行的情况下运行了这段代码,并且调用nextLine[0]nextLine[6]完全按预期工作——也就是说,它们给了我一个 csv 文件的元素。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;
}
4

6 回答 6

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

此时您的dataMap变量尚未初始化。你应该得到一个编译器警告。

于 2009-04-09T16:05:53.733 回答
5

数据图在哪里初始化?它始终为空。

为了澄清,您声明变量并将其设置为空。但是你需要实例化一个新的 Map,不管是 HashMap 还是类似的。

例如

datamap = new HashMap();

(撇开泛型等)

于 2009-04-09T16:04:28.933 回答
3

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

数据映射 = 新哈希映射();

于 2009-04-09T16:05:15.110 回答
1

好吧,在那条线上访问了三个对象。如果 nextLine[0] 和 nextLine[6] 不为空,因为上面的 println 调用有效,则剩下 dataMap。你做了 dataMap = new HashMap(); 某处?

于 2009-04-09T16:05:32.300 回答
0

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

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

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

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

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

我应该怎么做?

Ans: 我应该检查 null 之类的

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

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

于 2021-02-10T13:00:31.410 回答
-2

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

HashMap<String, String> dataMap = null;
...
dataMap.put(...)
于 2009-04-09T16:06:12.750 回答