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方法,是否彻底
所以我前面说,序列化/反序列化,是一个比较彻底深克隆,当然,也有限制,要去都是可序列化的