java.util.ArrayList.clone是不是彻底的克隆? 这算是什么。String[] a = {"aa","bb"}; String[] b = Arrays.copyOf(a,a.length); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 明白了深克隆的定义。 public Object clone() { try { @SuppressWarnings("unchecked") ArrayList<E> v = (ArrayList<E>) super.clone(); v.elementData = Arrays.copyOf(elementData, size); v.modCount = 0; return v; } catch (CloneNotSupportedException e) { // this shouldn't happen, since we are Cloneable throw new InternalError(); } }这2个是重新指过的v.elementData v.modCount = 0; 是深层克隆除elementData外,其他是primitive. 一个对象的深克隆,就是这个对象下面所有的引用类型,都重新克隆过。那数组举例浅克隆就是你看到的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方法,是否彻底所以我前面说,序列化/反序列化,是一个比较彻底深克隆,当然,也有限制,要去都是可序列化的 浅克隆就是你看到的Arrays.copyOf, System.arraycopy,数组是新的,但是里面N个元素全是旧的newArray[0].x = "我是新的,肯定是新的了,因为我克隆过了!!!"; oldArray[0].x = "图样图森破"; java swing小问题 关于java中Jlist如何连接到access数据库 JPanel使用GridLayout布局不能显示panel中加入的标签? 字符串数组如何判断其中的元素(元素可以没有次序)是否相等? 五一happy Java2D源码解析 很菜的问题.关于开发环境 Hashtable 难题 有没有好的网站? import javax.swing.JOptionPane;报错 关于Object lock的问题
try {
@SuppressWarnings("unchecked")
ArrayList<E> v = (ArrayList<E>) super.clone();
v.elementData = Arrays.copyOf(elementData, size);
v.modCount = 0;
return v;
} catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable
throw new InternalError();
}
}这2个是重新指过的
v.elementData
v.modCount = 0;
除elementData外,其他是primitive.
浅克隆就是你看到的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方法,是否彻底所以我前面说,序列化/反序列化,是一个比较彻底深克隆,当然,也有限制,要去都是可序列化的
oldArray[0].x = "图样图森破";