Computer >> Máy Tính >  >> Lập trình >> Java

Sao chép sâu và Sao chép nông trong Java

Cả bản sao sâu và bản sao nông đều đề cập đến việc tạo một bản sao của đối tượng được cung cấp theo những cách khác nhau -

Sao chép nông

Về cơ bản, điều này tạo ra một thể hiện mới của đối tượng và sao chép tất cả dữ liệu từ tập dữ liệu ban đầu sang thể hiện mới được tạo. Điều này có nghĩa là cá thể mới được tạo phải được truyền cụ thể vào đối tượng ban đầu. Nó còn được gọi là "nhân bản nông".

Ví dụ

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();
   }
}

Đầu ra

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

Một lớp có tên Demo chứa một biến và một phương thức khởi tạo sao chép các phần tử của mảng vào một mảng mới. Một hàm khác có tên là ‘display_data’ hiển thị mảng dữ liệu này. Trong hàm chính, một thể hiện được tạo, mảng được định nghĩa và hàm được gọi. Đầu ra có liên quan được hiển thị trên bảng điều khiển với tất cả các thay đổi được phản ánh trong đó.

Bản sao sâu

Điều này được sử dụng khi một bản sao dữ liệu riêng biệt được yêu cầu cho các mục đích hoặc cách sử dụng khác nhau. Tất cả các thành viên chủ đề của lớp cần phải triển khai giao diện "Có thể sao chép" và ghi đè phương thức "nhân bản".

Ví dụ

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();
   }
}

Đầu ra

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

Một lớp có tên Demo chứa một biến và một phương thức khởi tạo lặp qua mảng và chuyển nó sang một mảng khác. Một hàm khác có tên là ‘display_data’ hiển thị mảng dữ liệu này. Trong hàm themain, một thể hiện được tạo, mảng được xác định và hàm được gọi. Đầu ra có liên quan được hiển thị trên bảng điều khiển với tất cả các thay đổi được phản ánh trong đó.