深拷贝是将类的属性类也进行拷贝,而浅拷贝对于类的属性类进行公用操作。即深拷贝改变属性类的值拷贝对象不会随其变化,而浅拷贝会变化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void main(String[] args)  {

test s=new test();
s.setA(1);
test1 test1 = new test1();
test1.setT(s);
test1.setA(1);
test1 test2 = new test1();


//浅拷贝
org.springframework.beans.BeanUtils.copyProperties(test1,test2);
// 序列化 深拷贝
test1 clone = org.apache.commons.lang3.SerializationUtils.clone(test1);

test1.getT().setA(2);
System.out.println(test1);
//test1(a=1, t=test(a=2))
System.out.println(test2);
//test1(a=1, t=test(a=2))
System.out.println(clone);
//test1(a=1, t=test(a=1))
}

注:
二维数组要想在更改元素值后不改变原有的数组值则需要进行深拷贝,利用序列化进行深拷贝。因为二维数组的元素是一维数组,一维数组也是对象,默认的拷贝方式基本上都是浅拷贝,例如直接调用clone方法。