classAimplementsCloneable{ int a = 0; int[] b = {1, 2};
@Override protected Object clone()throws CloneNotSupportedException { A a = null; try { a = (A) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return a; } }
测试一下
1 2 3 4 5 6 7 8 9 10 11 12 13
A a = new A(); A b = (A) a.clone(); System.out.println(b.a); for (int i :b.b) { System.out.print(i); } b.a = 1; b.b[0] = 3; b.b[1] = 4; System.out.println(a.a); for (int i :a.b) { System.out.print(i); }
1 2 3
测试结果是: 01,2 03,4
因为a是基本类型所以值不变,但是b是引用类型,所以值也被改变了
深拷贝
和浅拷贝就一些细微区别,深拷贝是把对象中的属性也进行了一个拷贝
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
classAimplementsCloneable{ int a = 0; int[] b = {1, 2};