Java中的深层复制和浅层复制

深度复制和浅表复制均指创建以不同方式给出的对象副本-

浅拷贝

这基本上将创建对象的新实例,并将所有数据从原始数据集复制到新创建的实例。这意味着必须将新创建的实例专门转换为原始对象。也被称为“浅克隆”。

示例

import java.util.* ;
class Demo{
   private int[] my_data;
   public Demo(int[] my_vals){
      my_data = my_vals;
   }
   public void display_data(){
      System.out.println(Arrays.toString(my_data) );
   }
}
public class Use_Demo{
   public static void main(String[] args){
      int[] my_vals = {56, 89, 91};
      Demo my_inst = new Demo(my_vals);
      my_inst.display_data();
      my_vals[0] = 65;
      my_inst.display_data();
   }
}

输出结果

[56, 89, 91]
[65, 89, 91]

名为Demo的类包含一个变量和一个将数组元素复制到新数组中的构造函数。另一个名为“ display_data”的函数显示此数据数组。在main函数中,创建一个实例,定义数组,然后调用该函数。相关输出将显示在控制台上,并在其中反映所有更改。

深拷贝

当出于不同目的或用途需要单独的数据副本时,将使用此选项。该类的所有成员都需要实现'Cloneable'接口并覆盖'clone'方法。

示例

import java.util.*;
class Demo{
   private int[] my_data;
   public Demo(int[] my_vals){
      my_data = new int[my_vals.length];
      for (int i = 0; i < my_data.length; i++){
         my_data[i] = my_vals[i];
      }
   }
   public void display_data(){
      System.out.println(Arrays.toString(my_data));
   }
}
public class Use_Demo{
   public static void main(String[] args){
      int[] my_vals = {56, 89, 91};
      Demo my_inst = new Demo(my_vals);
      my_inst.display_data();
      my_vals[0] = 65;
      my_inst.display_data();
   }
}

输出结果

[56, 89, 91]
[56, 89, 91]

名为Demo的类包含一个变量和一个遍历该数组并将其复制到另一个数组的构造函数。另一个名为“ display_data”的函数显示此数据数组。在main函数中,创建一个实例,定义数组,然后调用该函数。相关输出将显示在控制台上,并在其中反映所有更改。