null和空列表有什么区别?

时间:2015-12-16 06:45:25

标签: java

        List<Map<String, Object>> pcList = null;
        Map<String, Object> pcMap = new HashMap<String, Object>();
        ComputerConfigurations tempPC = null;

        if (historyList != null) {
            Iterator<ComputerConfigurations> iterator = historyList.iterator();
            while (iterator.hasNext()) {
                tempPC = (ComputerConfigurations) iterator.next();
                pcMap.put(tempPC.getEnvironment(), tempPC);
                pcList.add((Map<String, Object>) pcMap);
            }
        }

我在pcList.add((Map<String, Object>)pcMap);行上获得空指针异常。 [Servlet Error]-: java.lang.NullPointerException。有什么建议吗?

4 个答案:

答案 0 :(得分:4)

在Java中,只是通过向他们添加内容,收藏品不会神奇地存在。您必须先创建集合来初始化pcList

List<Map<String, Object>> pcList = new ArrayList<>();

空集合与null不同。空集合实际上是一个集合,但它还没有任何元素。 null表示根本不存在任何集合。

请注意,对象不能是List类型,因为它是一个接口;因此,你必须告诉Java你真正需要什么样的List(例如ArrayList,如上所示,或LinkedList,或其他一些类实现List)。

答案 1 :(得分:0)

您在任何时候都没有初始化pcList。试试这个:

    final List<Map<String, Object>> pcList = new LinkedList<>();
    Map<String, Object> pcMap = new HashMap<String, Object>();
    ComputerConfigurations tempPC = null;

    if (historyList != null) {
        Iterator<ComputerConfigurations> iterator = historyList.iterator();
        while (iterator.hasNext()) {
            tempPC = (ComputerConfigurations) iterator.next();
            pcMap.put(tempPC.getEnvironment(), tempPC);
            pcList.add((Map<String, Object>) pcMap);
        }
    }

答案 2 :(得分:0)

以下是基于示例的答案。在下面的示例中,pcList刚刚初始化并指向null(java为您执行此操作,如果它是静态或类成员),因为没有为其分配空列表或值。

List<Map<String, Object>> pcList;

现在,为pcList分配了一个新的空ArrayList。它还没有任何值,但是列表中的所有位置都是空的,这个带有数据类型ArrayList的pcList指向这个新的空ArrayList。

List<Map<String, Object>> pcList;= new ArrayList<>();

如果已声明Object引用但未实例化,则其值为null。

答案 3 :(得分:-1)

    List<Map<String, Object>> pcList = new ArrayList<Map<String, Object>>();
    Map<String, Object> pcMap = new HashMap<String, Object>();
    ComputerConfigurations tempPC = null;

    if (historyList != null) {
        Iterator<ComputerConfigurations> iterator = historyList.iterator();
        while (iterator.hasNext()) {
            tempPC = (ComputerConfigurations) iterator.next();
            pcMap.put(tempPC.getEnvironment(), tempPC);
            pcList.add((Map<String, Object>) pcMap);
        }
    }