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