在我将null Map放入Map后得到大小时,它会给出Null Pointer Exception。 当我们知道允许HashMap放入null值和键时。 当我们放置空地图时为什么会这样。
public static void main(String[] args){
Map<String, Integer> n=new HashMap<String, Integer>();
n.put("1", 1);
System.out.println(n.size());
Map<String, Integer> nn=null;
n.putAll(nn);
System.out.println(n.size());
}
答案 0 :(得分:3)
你没有得到NPE呼叫n.size()
;在调用n.putAll(nn)
时,您在上一行获得了NPE。虽然允许HashMap中的各个键和值为null,但putAll
的map参数不允许。 The documentation of HashMap.putAll
说:
抛出
NullPointerException
- 如果指定的地图为空
如果您想要putAll
0个条目,可以使用非空的空地图。
答案 1 :(得分:0)
HashMap
允许null
值,但整个对象不应为null
。
putAll
调用您尝试添加的集合上的操作及其null。
答案 2 :(得分:0)
您在此处指定null
:
Map<String, Integer> nn=null;
并在此处添加另一张地图:
n.putAll(nn);
因此NPE
答案 3 :(得分:0)
n.putAll(nn);
投掷NPE
。如果我们查看来源,HashMap.putAll(Map<K, V> map)
的第一行是int numKeysToBeAdded = m.size();
由于上面一行中的m
为空,因此会抛出NPE
。