哈希表中有非空 <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

  1. 如果h本身就是null.

  2. 如果 itemnull

您的代码无法编译,因为 Hashtable<String,int> 无效。应该是 Hashtable<String,Integer>.

int value= h.get(item); 可能抛出异常有两个原因:

  1. h 为空(不太可能)。
  2. item的值不在Hashtable中,返回null,自动拆箱Integerint会抛出NullPointerException.