import java.util.Arrays;
public class A {
public static A[] a={};//这里定义数组,难道是 定义成 Arrays ?抑或是声明引用而已 public void test()
{
System.out.println(a.length);

a = (A[]) Arrays.copyOf(a,a.length + 1);
System.out.println(a.length);

a = (A[]) Arrays.copyOf(a,a.length + 1);//临时Arrays,函数结束后(超过作用域),内存还能继续使用?
System.out.println(a.length);
}

public static void main(String[] args) {
A one = new A();
one .test();
}
}运行结果:
0
1
2

解决方案 »

  1.   

    copyOf 源码,首先是创建一个新的数组,然后再拷贝。
    public static int[] copyOf(int[] original, int newLength) { 
       int[] copy = new int[newLength]; 
       System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); 
       return copy; 
    }
      

  2.   

    使用copyOf()方法必须明确,是自行新建立一个数组对象。
    Arrays的copyOf()方法传回的数组是新的数组对象,所以改变传回数组中的元素值或者数组长度,是不会影响原数组的。比如:
    int[] arr1 = {1, 2, 3, 4, 5}; 
    int[] arr2 = Arrays.copyOf(arr1, arr1.length);for(int i = 0; i < arr2.length; i++) 
    System.out.print(arr2[i] + " "); 
    运行结果为:1 2 3 4 5copyOf()的第二个自变量指定要建立的新数组长度,如果新数组的长度超过原数组的长度,则保留数组默认值,例如:
    int[] arr1 = {1, 2, 3, 4, 5}; 
    int[] arr2 = Arrays.copyOf(arr1, arr1.length+1);for(int i = 0; i < arr2.length; i++) 
    System.out.print(arr2[i] + " "); 
    运行结果为:1 2 3 4 5 0欢迎来提问
      

  3.   

    Arrays.copy()方法里面的实现会重新创建一个新数组的,然后把老数组的数据放进新数组中返回给你,所以给你造成了觉得数组也可以扩容的效果,进去看看源码就知道了