话不多说,直接上代码
@SuppressWarnings({"all"})
public class HashMapDemo4 {
public static void main(String[] args) {
// 先看hashMap
Map hashMap = new HashMap<>();
hashMap.put(null,null);
Map hashtable = new Hashtable<>();
hashtable.put(null,null);
}
}
这时直接在hashMap的put()上打上断点,进行debug调试
当我们进入hash()时,可以看到, 当key为null时, 会给一个默认值0返回, 也就是说当key == null时,并不会调用hashCode(),因此也就不会出现空指针异常了
这时,我们将断点打在下面一个put方法上
进入put()方法后,直接就来了一手value空值判断。。如果为空就直接抛出空指针异常
显然不失众望。。。
注意在put方法的下有 int hash = key.hashCode(); 这样当key为null时,也会直接抛出空指针异常。。至此这就是为啥 hashMap中key与value都可以添加null,而hashtable中key与value都不能添加null的原因了。。。



