Java对象数组深复制
1.今天做项目的时候遇到了一个java数组深拷贝的问题,当时直接使用了Object对象的clone方法,结果不管用。
ArrayList<Cell> cells = ArrayList<Cell>();
ArrayList<Cell> init_cells = new ArrayList<Cell>();
init_cells = (ArrayList<Cell>) cells.clone();
执行以下的测试代码:
System.out.println(init_cells.get(0).name);
cells.get(0).name = "aaaaaaaa";
System.out.println(init_cells.get(0).name);
结果输出的结果是
c1
aaaaaaa
对象数组深拷贝失败
解决方法:
1.将需要深拷贝的对象实现Cloneable接口
2.对对象数组中的每一个对象进行深拷贝
public static void deep_clone(ArrayList<Cell> clone_cells){
for(Cell c : cells){
clone_cells.add((Cell) c.clone());
}
}
deep_clone(init_cells);
System.out.println(init_cells.get(0).name);
cells.get(0).name = "aaaaaaaa";
System.out.println(init_cells.get(0).name);
在Cell.java中实现Cloneable接口
public class Cell implements Cloneable {
public Object clone() {
Cell o = null;
try {
o = (Cell) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}
最后输出结果是:
c1
c1