数组的拷贝 分为 2种情况,一种为浅拷贝,即引用传递,第二种为深拷贝,即不单单只是拷贝了引用,同时开辟了一块新的内存空间
一)浅拷贝有三种方式:
//第一种方式利用for循环:int[] a={1,2,4,6};int length=a.length;int[] b=new int[length];for (int i = 0; i < length; i++) {b[i]=a[i];}//第二种方式直接赋值:int[] array1={1,2,4,6};int[] array2=a;/*这里把array1数组的值复制给array2,如果你这样去运行,就会发现此时两个数组的值是一样的。这是传递的是引用(也就是地址),之后改变其中一个数组另一个也会跟着变化。*/ //第三种方式:利用Arrays自带的copyof int copy[] = Arrays.copyOf(a, a.length);
二)一维数组的深拷贝(system.arrayCopy())
/**
* 数组深拷贝的方法有如下几种: * 1。 调用clone * 2。 调用System.arraycopy * 以上两种对基本类型和对象类型数据效果等同。 * 3。 使用FOR循环,将数组的每个元素复制。(注意调用clone方法) */举例:
Object[] src = new Object[]{ new String("Zhao"), Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3), Integer.valueOf(4)}; Object[] dest = src.clone(); //1.拷贝数据 // Object[] dest = new Object[5]; // System.arraycopy(src, 0, dest, 0, dest.length); System.out.println( dest.equals(src)); System.out.println( dest == src ); for (int i = 0; i < dest.length; i++) { System.out.print( dest[i]+", " ); dest[i] = new String("KE"); //2.改变新数组内容 System.out.print( dest[i]+", " ); System.out.println( src[i]+","); //3.不影响原始数组 } System.out.println();
注意: 一维数组下的深拷贝在 多维数组 只是浅拷贝!!