在 Java 中克隆一個物件

Aryan Tyagi 2023年1月30日 2021年6月29日
  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