null数组与null数组之间的区别

时间:2015-07-01 19:30:33

标签: java arraylist

鉴于以下代码:

List<Object> arrayList = new ArrayList<Object>();
for(int counter=0; counter < 100; counter++) {
  arrayList.add(null);
}

除了实例化并且大小为100之外,&#34; arrayList&#34;从一个实际上为空的List?

好奇。

感谢。

3 个答案:

答案 0 :(得分:1)

首先要做的事情是:ArrayList<...>不是数组,ArrayList更复杂,但使用数组作为后备数据结构。

现在回答你的问题:我想到的两个主要区别是:

  • 指向null的引用比大小为100的实际ArrayList消耗更少的内存。请注意,引用的大小相同,但指向null的引用不指向分配内存。对于包含100个ArrayList条目的null,所有对100个emelemts的引用都存在,但引用null,使其消耗更多内存。
  • 您无法在null上调用方法:

    List<Object> list1 = new ArrayList<Object>(100);
    list1.size(); // totally fine, will return 0
    List<Object> list2 = null;
    list2.size(); // throws a NullPointerException
    

答案 1 :(得分:1)

很简单。如果您的ArrayList为null,则它只是一个空对象引用,就像任何其他引用一样(指定了特定类型)。

如果你有一个ArrayList个100个空元素,那么它是一个完全实例化的ArrayList封装100个空对象引用。

功能,您可以在不生成异常的情况下引用这100个空引用中的任何一个。使用null ArrayList,任何访问列表特定成员的尝试都将产生异常。

实际上,就像背景资料一样,从任何返回集合的方法返回实例化集合通常是个好主意。它允许调用代码一般枚举集合,即使它包含任何它应该包含的零实例。当然,意见可能会有所不同。 ; - )

答案 2 :(得分:0)

如果已定义其变量但尚未将其声明为新的ArrayList,则列表将为null。

List<String> nullList;
List<String> emptyList = new ArrayList<String>();
//empty list has been defined as a new ArrayList so it is not null, however it is empty because it has no elements
emptyList.add(null);
//empty list is still empty since all values are null

所以这样做:

nullList == null

会返回true,但是:

emptyList == null

将返回false