哈希表中具有非空<键,值>对的空指针异常



我得到一个空指针异常,带有哈希表'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);可能引发异常,原因有两个:

  1. h为空(不太可能(。
  2. item的值不在Hashtable中,返回null,并且自动将Integer拆箱到int会抛出NullPointerException

您正在按如下方式创建Hashtable

Hashtable<String,int> h = new Hashtable<String,int>();

这甚至不会编译。你将收到编译器错误。

您应该按如下方式更改它:

Hashtable<String,Integer> h = new Hashtable<String,Integer>();

此外,在以下情况下,您可以获得NullPointerException

  1. 如果h本身是null.

  2. 如果item null.

最新更新