ArrayList源码里面有着一段代码:
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;
    }
我想问一下a[size] = null;这一句有什么作用?为什么要设成NULL?

解决方案 »

  1.   

    说一下我感觉的意思。
    定义一个长度为10的list,list其实就是由一个数组组成的,
    这个list的长度为10的话,那么数组中长度10之后的数组对象都要设置为空。
      

  2.   

    因为a的下标最大为size-1,a[size]必须为空
      

  3.   

    个人理解,在a的长度大于这个容器的元素时,给调用者一个辨别放到数组里的元素个数的方法.也就是说,一到null,就说明数组后面的内容不再是从容器里转换来的了。
      

  4.   

    +1,分界用的
    试试下面的看看就知道了List<Integer> list = new ArrayList<Integer>(5);
    for(int i = 0; i < 5; i ++){
    list.add(Integer.valueOf(1));
    }
    Integer[] array = new Integer[10];
    for(int i = 0; i < array.length; i ++){
    array[i] = Integer.valueOf(2);
    }
    list.toArray(array);
    for(Integer value : array){
    System.out.println(value);
    }