色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java淺復制和深復制

黃文隆1年前7瀏覽0評論

Java是一門面向對象的編程語言,在進行對象復制時,常見的有淺復制和深復制。

淺復制是指復制對象時,只復制對象中的基本類型和引用類型的值,而不復制引用的對象本身。因此,淺復制得到的結果是兩個對象引用了同一個內存地址中的對象。

// 淺復制示例
public class ShallowCopy implements Cloneable{
private int[] arr;
public ShallowCopy() {
arr = new int[10];
for (int i = 0; i< arr.length; i++) {
arr[i] = i;
}
}
public void set(int index, int value) {
arr[index] = value;
}
public int get(int index) {
return arr[index];
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone(); // 調用Object類的clone方法,生成克隆對象
}
}
ShallowCopy sc = new ShallowCopy();
ShallowCopy sc1 = (ShallowCopy) sc.clone();
sc.set(0, 10);
System.out.println(sc.get(0));
System.out.println(sc1.get(0));
// 輸出結果:10 10

上述代碼中,我們創建了兩個對象sc和sc1,使用淺復制方式復制了sc,并將sc中的第一個元素改為了10,最終我們發現sc1中的第一個元素也為10,說明它們引用了同一個內存地址中的對象。

深復制是指復制對象時,不僅復制對象中的基本類型和引用類型的值,還復制引用的對象本身,因此得到的結果是兩個對象各自擁有一份相同的內容,但是使用了不同的地址空間。

// 深復制示例
public class DeepCopy implements Cloneable{
private int[] arr;
public DeepCopy() {
arr = new int[10];
for (int i = 0; i< arr.length; i++) {
arr[i] = i;
}
}
public void set(int index, int value) {
arr[index] = value;
}
public int get(int index) {
return arr[index];
}
@Override
public Object clone() throws CloneNotSupportedException {
DeepCopy copy = (DeepCopy) super.clone();
copy.arr = arr.clone(); // 復制數組對象
return copy;
}
}
DeepCopy dc = new DeepCopy();
DeepCopy dc1 = (DeepCopy) dc.clone();
dc.set(0, 10);
System.out.println(dc.get(0));
System.out.println(dc1.get(0));
// 輸出結果:10 0

上述代碼中我們又創建了兩個對象dc和dc1,使用深復制方式復制了dc,并將dc中的第一個元素改為了10,最終我們發現dc1中的第一個元素依然為0,說明它們使用了不同的地址空間。