获取大小时,地图的空指针异常

时间:2014-09-16 06:49:52

标签: java collections

在我将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());
    }

4 个答案:

答案 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