[英]Why is arr[6] returning a null value in this code?
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]);
}
Output:
arr[6]=谁
arr[6]=空
敲敲
我是
瓦斯维
嘿
那里
null
你?
一旦调用 toArray(arr) 方法,arr[6] 就变成 null。 我无法理解为什么?
因为toArray(T[] a)
的实现有语句
if (a.length > size)
a[size] = null;
就是这种情况,因为size
是 6 而a.length
是 8,因此a[6] = null
这正是您观察到的。
文档解释:
如果列表适合指定的数组并有剩余空间(即,数组的元素比列表多),则数组中紧跟集合末尾的元素设置为
null
。 (仅当调用者知道列表不包含任何 null 元素时,这对确定列表的长度很有用。)
无需查看实现; 看看文档就足够了:
如果列表适合指定的数组并有剩余空间(即,数组的元素多于列表),则数组中紧跟集合末尾的元素设置为 null。
了解toArray(T[] a)
如何工作的最好方法是花点时间阅读javadocs :
如果列表适合指定的数组并有剩余空间(即,数组的元素多于列表),则数组中紧随列表末尾的元素设置为 null 。 (仅当调用者知道列表不包含任何 null 元素时,这对确定列表的长度很有用。)
在您的示例数组中有 8 个元素并且仅列出 6 个。因为第 6 个元素是null
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.