当前位置: 代码迷 >> J2SE >> java.util.ArrayList.clone是否彻底的克隆
  详细解决方案

java.util.ArrayList.clone是否彻底的克隆

热度:67   发布时间:2016-04-23 20:33:59.0
java.util.ArrayList.clone是不是彻底的克隆?
java.util.ArrayList.clone()是不是连数组中的对象也克隆了?

java.util.ArrayList<MyType> myarr=XXXX;
java.util.ArrayList<MyType> myclone=(java.util.ArrayList<MyType>)myarr.clone();

MyType t=myarr.get(1);
MyType c=myclone.get(1);

1.c 和 t 引用的是不是不同的两个对象?对c的任何操作都不会影响到t?
2.MyType 是不是必须重载一个clone函数?
------解决方案--------------------
不是深克隆,所以
1. 是同一个对象
2. 重写不重写都没有区别
------解决方案--------------------
一个对象的深克隆,就是这个对象下面所有的引用类型,都重新克隆过。那数组举例
浅克隆就是你看到的Arrays.copyOf, System.arraycopy,数组是新的,但是里面N个元素全是旧的
一般意义的深克隆,就是
A[] newArray = new A[oldArray.length];
for (int i = 0; i = newArray.length; i++) {
  newArray[i] = (A) oldArray[i].clone();
}

但是这个只是一般意义的,完全依赖于A类(及其所有字段所在的类)的clone方法,是否彻底

所以我前面说,序列化/反序列化,是一个比较彻底深克隆,当然,也有限制,要去都是可序列化的
  相关解决方案