我得到一个空指针异常,带有哈希表'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);
}
您的代码无法编译,因为Hashtable<String,int>
无效。应该是Hashtable<String,Integer>
.
行int value= h.get(item);
可能引发异常,原因有两个:
-
h
为空(不太可能(。 item
的值不在Hashtable
中,返回null,并且自动将Integer
拆箱到int
会抛出NullPointerException
。
您正在按如下方式创建Hashtable
:
Hashtable<String,int> h = new Hashtable<String,int>();
这甚至不会编译。你将收到编译器错误。
您应该按如下方式更改它:
Hashtable<String,Integer> h = new Hashtable<String,Integer>();
此外,在以下情况下,您可以获得NullPointerException
:
如果
h
本身是null
.如果
item
null
.