ทั้งสำเนาลึกและสำเนาตื้นหมายถึงการสร้างสำเนาของวัตถุที่ให้ในรูปแบบต่างๆ -
สำเนาตื้น
โดยทั่วไปสิ่งนี้จะสร้างอินสแตนซ์ใหม่ของวัตถุและคัดลอกข้อมูลทั้งหมดจากชุดข้อมูลดั้งเดิมไปยังอินสแตนซ์ที่สร้างขึ้นใหม่ ซึ่งหมายความว่าจะต้องส่งอินสแตนซ์ที่สร้างขึ้นใหม่ไปยังวัตถุดั้งเดิมโดยเฉพาะ เรียกอีกอย่างว่า 'การโคลนตื้น'
ตัวอย่าง
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' จะแสดงอาร์เรย์ของข้อมูลนี้ ในฟังก์ชันหลัก มีการสร้างอินสแตนซ์ อาร์เรย์ถูกกำหนด และฟังก์ชันถูกเรียก เอาต์พุตที่เกี่ยวข้องจะแสดงบนคอนโซลโดยมีการเปลี่ยนแปลงทั้งหมดที่สะท้อนอยู่ในคอนโซล
สำเนาลึก
ใช้เมื่อต้องการสำเนาข้อมูลแยกต่างหากเพื่อวัตถุประสงค์หรือการใช้งานที่แตกต่างกัน สมาชิกทุกคนในคลาสต้องใช้อินเทอร์เฟซ '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' จะแสดงอาร์เรย์ของข้อมูลนี้ ในฟังก์ชันหลัก อินสแตนซ์จะถูกสร้างขึ้น อาร์เรย์ถูกกำหนด และฟังก์ชันถูกเรียก ผลลัพธ์ที่เกี่ยวข้องจะแสดงบนคอนโซลพร้อมการเปลี่ยนแปลงทั้งหมดที่สะท้อนอยู่ในคอนโซล