使用HashMap的put方法时出现NullPointerException

时间:2009-04-09 16:00:59

标签: java hashmap nullpointerexception

以下代码给了我一个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;
}

6 个答案:

答案 0 :(得分:34)

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

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

答案 1 :(得分:5)

数据图初始化在哪里?它总是空的。

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

e.g。

datamap = new HashMap();

(撇开仿制药等)

答案 2 :(得分:3)

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

初始化

datamap = new HashMap();

答案 3 :(得分:1)

嗯,在该行上访问了三个对象。如果nextLine [0]和nextLine [6]不为null,因为上面的println调用有效,那么就会离开dataMap。你做过dataMap = new HashMap(); somwehere?

答案 4 :(得分:0)

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

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

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

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

现在这将产生一个 nullPointerExeption,因为将一个空值与某个整数相匹配。

我应该怎么做?

Ans: 我应该检查 null like

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

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

答案 5 :(得分:-1)

嗯,当你这么做时,你期望做什么

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