标签:
数组的拷贝 分为 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();
注意: 一维数组下的深拷贝在 多维数组 只是浅拷贝!!
标签:
原文地址:http://my.oschina.net/reesechou/blog/465934