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

java的淺克隆和深克隆

林子帆1年前7瀏覽0評論

在Java編程中,克隆是指創建一個與原始對象完全相同的新對象。然而,在克隆過程中,有兩種不同的方法:淺克隆和深克隆。

淺克隆

public class ShallowClone implements Cloneable {
private int[] intArr;
public ShallowClone() {
intArr = new int[10];
for (int i = 0; i< intArr.length; i++) {
intArr[i] = i;
}
}
public void setInt(int index, int value) {
intArr[index] = value;
}
public int[] getInt() {
return intArr;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

在淺克隆中,當原始對象被克隆時,對象的所有基本類型字段(比如int、float等)和非基本類型字段(比如String)都會被復制,但對象所包含的引用類型的成員變量只是復制了引用,而不是克隆了對象本身。因此,如果原始對象的引用類型的成員變量改變了,那么它被克隆的副本也會改變。

深克隆

public class DeepClone implements Cloneable {
private int[] intArr;
public DeepClone() {
intArr = new int[10];
for (int i = 0; i< intArr.length; i++) {
intArr[i] = i;
}
}
public void setInt(int index, int value) {
intArr[index] = value;
}
public int[] getInt() {
return intArr;
}
public Object clone() throws CloneNotSupportedException {
DeepClone deepClone = (DeepClone) super.clone();
deepClone.intArr = (int[]) intArr.clone();
return deepClone;
}
}

深克隆是指在克隆一個對象時,將該對象所有的引用類型成員變量都進行遞歸地克隆,從而獲得一個全新的,與原來完全獨立的對象副本。在深克隆中,當原始對象被克隆時,所有的成員變量(包括基本類型和引用類型)都會被復制,并且這些復制的對象在內存中也是不同的,從而保證了克隆對象的獨立性。

在實際編程中,我們通常會根據需求選擇是否要使用深克隆。如果對象的引用類型成員變量無須修改,那么使用淺克隆是更為簡潔和高效的。而如果引用類型成員變量有可能被改變,那么使用深克隆將更為安全。