我得到一个带有哈希表的空指针异常' get'方法调用。关键绝对不是空的。我通过确定变量项的值来检查' check1'(在代码中注释)。我有有效的字符串列表。我仍然得到一个空指针异常。我究竟做错了什么 ?
List<String> l= new ArrayList<String>();
//Values added to l;
Hashtable<String,int> h=new Hashtable<String,int>();
for(int i=0;i<l.size();i++){
String item= l.get(i);
//check1
int value= h.get(item); //exception arises at this point
h.put(item,++value);
}
答案 0 :(得分:3)
您的代码无法编译,因为Hashtable<String,int>
无效。它应该是Hashtable<String,Integer>
。
行int value= h.get(item);
可以抛出异常有两个原因:
h
为空(不太可能)。item
的值不在Hashtable
中,返回null,Integer
到int
的自动取消装箱将抛出NullPointerException
} 即可。答案 1 :(得分:1)
您正在创建Hashtable
,如下所示:
Hashtable<String,int> h = new Hashtable<String,int>();
这甚至都不会编译。您将收到编译器错误。
您应该按如下方式进行更改:
Hashtable<String,Integer> h = new Hashtable<String,Integer>();
此外,您可以在以下情况下获得NullPointerException
:
如果h
本身为null
。
如果item
是null
。