欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java深復(fù)制和淺復(fù)制的區(qū)別

呂致盈1年前7瀏覽0評論

在學(xué)習(xí)Java編程語言中,我們會對深復(fù)制和淺復(fù)制有所了解。那么,深復(fù)制和淺復(fù)制有什么區(qū)別呢?

淺復(fù)制是指將一個對象的引用直接賦給另一個對象,新對象和原對象共享同一個實(shí)例變量,當(dāng)原對象中的實(shí)例變量發(fā)生改變時,新對象中的實(shí)例變量也會跟著改變。而深復(fù)制則是將原對象中的實(shí)例變量復(fù)制一份到新對象中,新對象和原對象各自擁有一份實(shí)例變量,互不干擾。

//淺復(fù)制
public class ShallowCopy implements Cloneable {
private int[] value;
public ShallowCopy() {
value = new int[]{1, 2, 3, 4, 5};
}
public void setValue(int index, int val) {
value[index] = val;
}
public int getValue(int index) {
return value[index];
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
ShallowCopy original = new ShallowCopy();
ShallowCopy copy = (ShallowCopy) original.clone();
System.out.println(original.getValue(2));    //輸出3
copy.setValue(2, 9);
System.out.println(original.getValue(2));    //輸出9
//深復(fù)制
public class DeepCopy implements Cloneable {
private int[] value;
public DeepCopy() {
value = new int[]{1, 2, 3, 4, 5};
}
public void setValue(int index, int val) {
value[index] = val;
}
public int getValue(int index) {
return value[index];
}
public Object clone() throws CloneNotSupportedException {
DeepCopy copy = (DeepCopy) super.clone();
copy.value = new int[value.length];
System.arraycopy(value, 0, copy.value, 0, value.length);
return copy;
}
}
DeepCopy original = new DeepCopy();
DeepCopy copy = (DeepCopy) original.clone();
System.out.println(original.getValue(2));    //輸出3
copy.setValue(2, 9);
System.out.println(original.getValue(2));    //輸出3

通過上面的例子可以看出,淺復(fù)制只是復(fù)制了引用,對原對象的修改會影響到新對象,而深復(fù)制則是完全獨(dú)立的拷貝,不會對原對象造成影響。