Java 获取大小时映射的空指针异常
当我们将空映射放入映射后得到大小时,它会给出空指针异常。 当我们知道HashMap被允许放置null值和key时。 为什么当我们放置空映射时会发生这种情况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(
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);