数组的拷贝 分为 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();
注意: 一维数组下的深拷贝在 多维数组 只是浅拷贝!!
时间: 2024-10-31 13:13:33