在 Java 中克隆一個物件

Aryan Tyagi 2023年10月12日
  1. 在 Java 中使用 Direct 方法克隆物件
  2. 在 Java 中使用 clone() 函式克隆物件
  3. 在 Java 中使用複製建構函式克隆物件
在 Java 中克隆一個物件

物件克隆是一種對物件進行精確複製的技術。它建立當前物件類的新例項,並用當前物件欄位的確切內容填充其所有欄位。

在本教程中,我們將在 Java 中克隆一個物件。

在 Java 中使用 Direct 方法克隆物件

在此方法中,我們將建立一個新物件並分配一些先前定義的物件作為其值。

請參考以下示例。

public class shallowcopy implements Cloneable {
  int a, b;

  public static void main(String args[]) throws CloneNotSupportedException {
    shallowcopy d = new shallowcopy();
    d.a = 10;
    d.b = 12;
    shallowcopy dtwo = d;

    System.out.println("Original " + d.a);
    System.out.println(d.b);
    System.out.println("Shallow Copy " + dtwo.a);
    System.out.println(dtwo.b);
    d.a = 5;
    System.out.println("Copy after modifying original");
    System.out.println(dtwo.a);
  }
}

輸出:

Original 10
12
Shallow Copy 10
12
Copy after modifying original
5

在上面的程式碼中,我們更改了原始程式碼並看到了所建立副本中反映的更改。這樣的克隆稱為淺拷貝。

在返回同一個類的新例項之前,淺拷貝產生同一個類的一個新例項並複製其欄位。在這個過程中,一個物件的內容被轉移到一個新的物件。但是,這兩個物件引用相同的值,因此對連結物件所做的任何修改都將反映在其他物件中。物件類具有克隆功能以及淺拷貝功能。物件類具有克隆功能以及淺拷貝功能。

在 Java 中使用 clone() 函式克隆物件

要克隆一個物件,請使用 Object 類的 clone() 方法。這是複製陣列的最快方法。

我們希望生成其物件克隆的類必須實現 Cloneable 介面。如果沒有實現 Cloneable 介面,clone() 函式會丟擲一個 CloneNotSupportedException

clone() 函式消除了在製作物件的精確副本時進行額外處理的需要。如果我們使用 new,需要很長時間來處理,這就是我們使用物件克隆的原因。我們將使用它來建立一個深拷貝。

當一個專案與其引用的物件一起被複制時,它被稱為深拷貝。副本中所做的任何更改都不會反映在原件上。

例如,

import java.util.ArrayList;
public class deepcopy implements Cloneable {
  int a, b;

  public Object clone() throws CloneNotSupportedException {
    return (deepcopy) super.clone();
  }
  public static void main(String args[]) throws CloneNotSupportedException {
    deepcopy d = new deepcopy();
    d.a = 10;
    d.b = 12;
    System.out.println("Original " + d.a);
    System.out.println(d.b);
    deepcopy dtwo = (deepcopy) d.clone();
    System.out.println("Deep Copy " + dtwo.a);
    System.out.println(dtwo.b);
    d.a = 5;
    System.out.println("Copy after modifying original");
    System.out.println(dtwo.a);
  }
}

輸出:

Original 10
12
Deep Copy 10
12
Copy after modifying original
10

在上面的示例中,對原始檔案所做的更改不會反映在深層副本中。

在 Java 中使用複製建構函式克隆物件

建構函式初始化某個類的物件。複製建構函式可以建立某個類的重複物件。

請參考下面的程式碼以瞭解如何初始化此類。

class copycon {
  public String cc;
  public copycon(String s) {
    this.cc = s;
  }
  public copycon(copycon different) {
    this.cc = different.cc; // copy constructor
  }
}
class Main {
  public static void main(String args[]) {
    copycon c1 = new copycon("abc");
    copycon c2 = new copycon(c1);
    System.out.println(c2.cc);
  }
}

輸出:

abc

這不會在 Java 中實現深度克隆。

相關文章 - Java Object