【问题标题】:Null Pointer Exception For Map when getting size获取大小时地图的空指针异常
【发布时间】:2014-09-16 06:49:51
【问题描述】:

当我们将空 Map 放入 Map 后获取大小时,它会给出空指针异常。 当我们知道 HashMap 允许放置空值和键时。 为什么当我们放空 Map 时会发生这种情况。

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

【问题讨论】:

    标签: java collections


    【解决方案1】:

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

    抛出NullPointerException - 如果指定的映射为空

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        您在此处将 null 分配给 nn:

        Map<String, Integer> nn=null;
        

        在这里放另一张地图:

          n.putAll(nn);
        

        因此NPE

        【讨论】:

          【解决方案4】:
          n.putAll(nn);
          

          正在抛出NPE。如果我们查看源代码,HashMap.putAll(Map&lt;K, V&gt; map) 的第一行是int numKeysToBeAdded = m.size();

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多