Java 获取大小时映射的空指针异常

Java 获取大小时映射的空指针异常,java,collections,Java,Collections,当我们将空映射放入映射后得到大小时,它会给出空指针异常。 当我们知道HashMap被允许放置null值和key时。 为什么当我们放置空映射时会发生这种情况 public static void main(String[] args){ Map<String, Integer> n=new HashMap<String, Integer>(); n.put("1", 1); System.out.println(n.size(

当我们将空映射放入映射后得到大小时,它会给出空指针异常。 当我们知道HashMap被允许放置null值和key时。 为什么当我们放置空映射时会发生这种情况

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());
    }
publicstaticvoidmain(字符串[]args){
Map n=新的HashMap();
n、 放入(“1”,1);
System.out.println(n.size());
Map nn=null;
n、 普塔尔(nn);
System.out.println(n.size());
}

您没有得到NPE调用
n.size()
;在调用
n.putAll(nn)
时,您将在前一行获得NPE。尽管HashMap中的单个键和值允许为null,但是
putAll
的map参数不允许为null。说:

如果指定的映射为null,则引发NullPointerException


如果您想
putAll
0个条目,可以使用非空映射。

HashMap
允许
null
值,但整个对象不应为
null


putAll
调用您试图添加的集合上的操作及其null。

您在此处将
null
分配给nn:

Map<String, Integer> nn=null;
因此
NPE

n.putAll(nn);
正在抛出一个
NPE
。如果我们查看源代码,
HashMap.putAll(Map Map)
的第一行是
int numKeysToBeAdded=m.size()

由于上行中的
m
为空,因此会抛出一个
NPE

n.putAll(nn);