当我进行ArrayList实现时,我在toArray(T [])方法中找到了一段奇怪的代码。
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
部分是,
if (a.length > size)
a[size] = null;
为什么只有数组中此索引处的元素设置为null?一旦数组填充了列表的内容,其余索引处的元素应该设置为null,对吧?或者我在这里遗漏了什么?
答案 0 :(得分:13)
javadoc解释了原因:
如果列表适合指定数组且有空余空间(即,数组的元素多于列表),则紧跟在列表末尾的数组中的元素将设置为
null
。 (仅当调用者知道列表中不包含任何null
元素时,这在确定列表长度时非常有用。)