本帖最后由 曾晓文 于 2012-4-10 23:45 编辑
因为这里调用的ArrayList集合的toArray方法需要接收一个数组的方法,<T> T[] toArray(T[] a)。所以在调用该方法是需要把存放 从ArrayList集合转为数组的元素。一种是先创建String数组对象,再把引用传到方法去:al.toArray(strs);
String[] strs = new String[al.size()];
String[] arr = al.toArray(strs);
另一种:在调用的时候在参数类表上new String数组对象。其实质和前一中方式是一样的,也是要在堆内存里new 一个String数组对象,然后把读写地址传给toArray方法。完了之后toArray方法返回刚才匿名String数组的引用。String[] arr = al.toArray(new String[al.size()]);
<T> T[] toArray(T[] a)的源代码:
public <T> T[] toArray(T[] a) {//a接收传进来的数组引用
if (a.length < size)
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
无参数的toArray方法:方法内部帮我们new 了一个String数组对象,然后把它创建的对象引用返回给我们。所以不要再传数组进去。 |