深拷贝与浅拷贝
对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同类类型的对象中去。在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用对象的部分或全部 数据。Java中有两种类型的对象拷贝:浅拷贝(Shallow Copy)、深拷贝(Deep Copy)。
浅拷贝例子
public class Test {
public static void main(String[] args) {
//初始化数组a
int[] a= {1,2,3};
int[] b;
//将a的地址传给b
b=a;
for(int i=0;i<=2;i++) {
System.out.print(b[i]+" ");
}
System.out.println();
//结果输出为1 2 3
a[1]=4;
for(int i=0;i<=2;i++) {
System.out.print(b[i]+" ");
}
System.out.println();
//结果输出为1 4 3
}
}
深拷贝例子
public class Test {
public static void main(String[] args) {
int[] a= {1,2,3};
//进行深拷贝,创建并初始化b之后,将a的值一一传递给b
int[] b= {0,0,0};
for(int i=0;i<=2;i++) {
b[i]=a[i];
}
for(int i=0;i<=2;i++) {
System.out.print(b[i]+" ");
}
System.out.println();
//结果是1 2 3
a[1]=4;
for(int i=0;i<=2;i++) {
System.out.print(b[i]+" ");
}
System.out.println();
}
//结果是1 2 3
}
所以浅拷贝仅仅是拷贝了地址,本质上来说并没有创建一个新的对象,它还是会随着原本变量的改变而改变,这种习惯是不好的。
而深拷贝则是创建了一个新的变量,并且拷贝了变量的所有值,是一个全新的与之前不相干的变量。