ডিপ কপি এবং শ্যালো কপি দুটি ভিন্ন পদ্ধতিতে দেয়া অবজেক্টের কপি তৈরি করার কাজে লাগে:
শ্যালো কপি
এটি মূলত অবজেক্টের একটি নতুন ইনস্ট্যান্স তৈরি করে এবং মূল ডেটা সেট থেকে সব ডেটা নতুন তৈরি ইনস্ট্যান্সে কপি করে। এর মানে নতুন তৈরি ইনস্ট্যান্সটিকে স্পেসিফিক্যালি মূল অবজেক্টে কাস্ট করতে হয়। এটাকে 'শ্যালো ক্লোনিং' ও বলা হয়।
উদাহরণ
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 ফাংশনে একটি ইনস্ট্যান্স তৈরি করা হয়েছে, অ্যারে সংজ্ঞায়িত করা হয়েছে এবং ফাংশনটি কল করা হয়েছে। সকল পরিবর্তনসহ প্রাসঙ্গিক আউটপুট কনসোলে দেখানো হয়েছে।