Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Deep Copy và Shallow Copy trong Java


Cả deep copy và shallow copy đều là tạo bản sao của đối tượng theo cách khác nhau:

Shallow copy

Tạo 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 gốc sang thể hiện mới. Thể hiện mới phải được cast cụ thể thành đối tượng gốc. Còn gọi là shallow cloning.

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

Kết quả

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

Lớp Demo chứa biến, constructor sao chép phần tử mảng vào mảng mới. Hàm display_data hiển thị mảng dữ liệu. Trong main, thể hiện được tạo, mảng định nghĩa, hàm được gọi. Kết quả hiển thị với mọi thay đổi phản ánh trong đó.

Deep copy

Dùng khi cần bản sao riêng của dữ liệu cho mục đích khác. Tất cả thành viên lớp cần triển khai interface Cloneable và ghi đè phương thức clone.

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

Kết quả

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

Lớp Demo chứa biến, constructor lặp qua mảng, sao chép sang mảng khác. Hàm display_data hiển thị mảng. Trong main, thể hiện được tạo, mảng định nghĩa, hàm được gọi. Kết quả hiển thị với mọi thay đổi phản ánh.