-2
ArrayList<String> list1=new ArrayList<String>(),list2 = new ArrayList<String>(),list3= new ArrayList<String>();
list1.add("Hey");
list1.add("there");
list1.add(0, "knock");
list1.add(0, "knock");
list2.addAll(list1);
list3.add("Vasvi");
list3.add(0, "I'm");
list2.addAll(2, list3);
        
String[] arr= new String[8];
        
        
arr[6]="Who're";
arr[7]="You?";
System.out.println("arr[6]="+arr[6]);
        
arr=list2.toArray(arr);
System.out.println("arr[6]="+arr[6]);
        
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

输出 :

arr[6]=谁是
arr[6]=null
敲敲
我是
Vasvi
嘿 null
你 ?

一旦调用 toArray(arr) 方法,arr[6] 就会变为 null。我无法理解为什么?

4

3 回答 3

3

因为执行toArray(T[] a)语句

if (a.length > size)
    a[size] = null;

这里就是这种情况,因为size是 6 和a.length8,因此a[6] = null这正是你观察到的。

文档解释:

如果列表适合指定的数组并有剩余空间(即,数组的元素比列表多),则数组中紧跟集合末尾的元素设置为null(仅当调用者知道列表不包含任何空元素时,这对确定列表的长度很有用。)

于 2020-07-30T07:36:54.203 回答
2

无需查看实现;看看文档就足够了:

如果列表适合指定的数组并有剩余空间(即,数组的元素多于列表),则数组中紧跟集合末尾的元素设置为空。

于 2020-07-30T07:40:10.480 回答
1

了解其toArray(T[] a)工作原理的最佳方法是花点时间阅读javadocs

如果列表适合指定的数组并有剩余空间(即,数组的元素比列表多),则数组中紧随列表末尾的元素设置为 null。(仅当调用者知道列表不包含任何空元素时,这对确定列表的长度很有用。)

在您的示例数组中有 8 个元素并且仅列出 6 个。因为第 6 个元素是null.

于 2020-07-30T07:39:47.370 回答