Java数组对象的深拷贝

xiaoxiao2021-02-28  52

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);

对于数组对象来说,直接对数组进行复制,虽然开辟了new了空间,但是因为数组中存的对象是引用数据类型,所以复制的时候也只是复制的引用。

对象数组深拷贝失败 解决方法: 1.将需要深拷贝的对象实现Cloneable接口 

2.对对象数组中的每一个对象进行深拷贝。即对每一个数组中的对象进行clone

3、因为object的clone是protected的,只能对本包或者继承类暴露这个方法,所以对象类型要实现Cloneable的接口,才能重写Clone方法。

在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; } }

然后递归对数组中的对象进行clone,并将clone的返回对象添加到新的数组中

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);
转载请注明原文地址: https://www.6miu.com/read-2630614.html

最新回复(0)