হ্যালো, আমিগো! আমি আপনাকে ভেরিয়েবলের অভ্যন্তরীণ গঠন সম্পর্কে বলতে চাই। আপনি ইতিমধ্যে জানেন, প্রতিটি ভেরিয়েবল মেমরির একটি এলাকার সাথে যুক্ত যেখানে এর মান সংরক্ষণ করা হয়। "

"হ্যাঁ। তুমি আমাকে শেষবারের মতো বলেছিলে।"

"দারুণ। তোমার মনে থাকাটা ভালো। তারপর আমি যাব।"

"সমস্ত যৌগিক প্রকারগুলিই সরলগুলি নিয়ে গঠিত৷ এবং তারা, তাদের পালাক্রমে, আরও সহজগুলি নিয়ে গঠিত৷ যতক্ষণ না, শেষ পর্যন্ত, আমরা আদিম প্রকারগুলি দিয়ে শেষ করি , যাকে আরও সরলীকরণ করা যায় না৷ এটিকেই বলা হয় - আদিম প্রকারগুলি . জন্য উদাহরণস্বরূপ, int হল একটি আদিম প্রকার, কিন্তু স্ট্রিং হল একটি যৌগিক প্রকার যা অক্ষরগুলির একটি সারণী হিসাবে তার ডেটা সংরক্ষণ করে (যেখানে প্রতিটি অক্ষর একটি আদিম প্রকার char )।"

"খুব মজার। যাও।"

"সাধারণগুলোকে গোষ্ঠীবদ্ধ করে যৌগিক প্রকারগুলি গঠিত হয়। আমরা এই ধরনের শ্রেণীকে বলি । যখন আমরা একটি প্রোগ্রামে একটি নতুন শ্রেণী সংজ্ঞায়িত করি, তখন আমরা একটি নতুন যৌগিক ডেটা টাইপ ঘোষণা করি । এর ডেটা হয় অন্য যৌগিক প্রকার বা আদিম প্রকার।"

জাভা কোড বর্ণনা
public class Person
{
   String name;
   int age;
}
একটি নতুন যৌগিক প্রকার ঘোষণা করা হয় - Person. এর ডেটা (কম্পোজিট টাইপ) ভেরিয়েবল এবং (প্রিমিটিভ টাইপ) ভেরিয়েবলে
সংরক্ষণ করা হয়Stringnameintage
public class Rectangle
{
   int x, y, width, height;
}
একটি নতুন যৌগিক প্রকার ঘোষণা করা হয় - Rectangle.
এটি চারটি int(আদিম প্রকার) ভেরিয়েবল নিয়ে গঠিত।
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
একটি নতুন যৌগিক প্রকার ঘোষণা করা হয় - Cat. এটিতে নিম্নলিখিত ভেরিয়েবল রয়েছে:
owner, যৌগিক প্রকার Person
territory, যৌগিক প্রকার Rectangle
age, আদিম প্রকার int
name, যৌগিক প্রকারString

"আপাতত, সবকিছু পরিষ্কার, যদিও এটি অদ্ভুত বলে মনে হতে পারে।"

"বড় (যৌগিক) প্রকারগুলিতে অনেকগুলি ছোট (আদিম) প্রকার থাকে৷ তাই এই ধরণের বস্তুগুলি অনেক মেমরি গ্রহণ করে - আদিম প্রকারের ভেরিয়েবলের চেয়ে বেশি৷ কখনও কখনও আরও অনেক কিছু৷ এই ধরনের ভেরিয়েবলগুলির সাথে অ্যাসাইনমেন্ট অপারেশনগুলি সম্পাদন করতে দীর্ঘ সময় লাগে৷ সময় এবং মেমরির বৃহৎ অংশের অনুলিপি করা প্রয়োজন। তাই যৌগিক প্রকারের ভেরিয়েবলগুলি বস্তুটিকে নিজেই সংরক্ষণ করে না, বরং এটির একটি রেফারেন্স, অর্থাৎ এর চার-বাইট ঠিকানা। এই ধরনের অবজেক্টের ডেটা ঠিকানার জন্য এটি যথেষ্ট। জাভা মেশিন সমস্ত সম্পর্কিত জটিলতাগুলি পরিচালনা করে।"

"আমি এর কিছুই বুঝতে পারিনি।"

"আমরা আগে বলেছি যে একটি ভেরিয়েবল একটি বাক্সের মতো। আপনি যদি এটিতে 13 নম্বরটি সংরক্ষণ করতে চান, আপনি একটি কাগজের টুকরোতে 13 লিখে বাক্সে রাখতে পারেন।"

"কিন্তু কল্পনা করুন যে আপনাকে বাক্সে (ভেরিয়েবল) বড় কিছু সঞ্চয় করতে হবে। উদাহরণস্বরূপ, একটি কুকুর, একটি গাড়ি বা আপনার প্রতিবেশী। বাক্সে ধাক্কা না দেওয়াকে ঠেলে দেওয়ার চেষ্টা করার পরিবর্তে, আপনি কিছু সহজ করতে পারেন: একটি ফটো ব্যবহার করুন আসল কুকুরের পরিবর্তে কুকুরের, আসল গাড়ির পরিবর্তে একটি লাইসেন্স প্লেট, অথবা আপনার প্রতিবেশীর পরিবর্তে আপনার প্রতিবেশীর ফোন নম্বর।"

"আমরা কাগজের টুকরো নিয়ে প্রতিবেশীর ফোন নম্বর লিখে রাখি। এটি একটি বস্তুর রেফারেন্সের মতো। আমরা যদি প্রতিবেশীর ফোন নম্বর সহ কাগজের টুকরোটি কপি করি এবং এটি বেশ কয়েকটি বাক্সে রাখি, তবে এখন আরও উল্লেখ রয়েছে। তোমার প্রতিবেশীর কাছে। কিন্তু, আগের মতই, তোমার এখনও শুধু একজন প্রতিবেশী আছে। এটা বোঝা যায়, তাই না?"

"এইভাবে ডেটা সংরক্ষণের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল যে আপনার কাছে একটি একক বস্তুর অনেকগুলি উল্লেখ থাকতে পারে "

"কত মজার! আমি প্রায় পেয়ে গেছি। আমাকে আরও একবার বলুন, অনুগ্রহ করে - যদি আমি একই কম্পোজিট টাইপের অন্য একটি ভেরিয়েবলকে কম্পোজিট টাইপের একটি ভেরিয়েবল বরাদ্দ করি?"

"তাহলে দুটি ভেরিয়েবল একই ঠিকানা সংরক্ষণ করবে। এর মানে হল যে আপনি যদি একটি ভেরিয়েবল দ্বারা উল্লেখ করা বস্তুর ডেটা পরিবর্তন করেন, তাহলে আপনি অন্যটির দ্বারা উল্লেখ করা ডেটা পরিবর্তন করেন। উভয় ভেরিয়েবল একই বস্তুর উল্লেখ করে । অবশ্যই, অনেকগুলি হতে পারে। অন্যান্য ভেরিয়েবল যা এটির রেফারেন্স সংরক্ষণ করে।"

"যদি কম্পোজিট (রেফারেন্স/ক্লাস) ধরনের ভেরিয়েবল কোন বস্তুর রেফারেন্স না রাখে তাহলে কি করবে? এটা কি সম্ভব?"

"হ্যাঁ, অ্যামিগো। আপনি আপনার প্রশ্ন নিয়ে আমার চেয়ে এগিয়ে যাচ্ছেন। এটা সম্ভব। যদি একটি রেফারেন্স (যৌগিক) টাইপের একটি ভেরিয়েবল কোনো বস্তুর রেফারেন্স সংরক্ষণ না করে, তাহলে এটি 'নাল' নামে পরিচিত যা সংরক্ষণ করে। রেফারেন্স'। মূলত, এর অর্থ হল এটি এমন একটি বস্তুকে উল্লেখ করে যার ঠিকানা 0। যাইহোক, জাভা মেশিন কখনই এই ঠিকানা দিয়ে বস্তু তৈরি করে না, তাই এটি সর্বদা জানে যে যদি একটি রেফারেন্স ভেরিয়েবল 0 থাকে তবে এটি কোনও বস্তুর দিকে নির্দেশ করে না। "

জাভা কোড বর্ণনা
String s;
String s = null;
সমতুল্য বিবৃতি।
Person person;
person = new Person();
person = null;
আমরা একটি ব্যক্তি পরিবর্তনশীল তৈরি করি যার মান নাল।
আমরা এটিকে একটি সদ্য নির্মিত ব্যক্তি বস্তুর ঠিকানা বরাদ্দ করি।
আমরা ভেরিয়েবলে নাল বরাদ্দ করি।
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
আমরা একটি Cat অবজেক্ট তৈরি করি এবং এর ঠিকানা পরিবর্তনশীল বিড়ালে সংরক্ষণ করি; cat.owner সমান নাল।
আমরা cat.ownerকে একটি সদ্য নির্মিত ব্যক্তি বস্তুর ঠিকানার সমান সেট করি।
cat.owner.name এখনও শূন্য সমান।
আমরা cat.owner.name সেট করি "ঈশ্বর" এর সমান

"আমি কি আপনাকে সঠিকভাবে বুঝতে পেরেছি? ভেরিয়েবল দুটি প্রকারে বিভক্ত: আদিম প্রকার এবং রেফারেন্স প্রকার। আদিম প্রকারগুলি সরাসরি মান সঞ্চয় করে, যখন রেফারেন্স প্রকারগুলি একটি বস্তুর একটি রেফারেন্স সঞ্চয় করে। আদিম প্রকারগুলি int, char, বুলিয়ান এবং আরও অনেকগুলি অন্তর্ভুক্ত করে। রেফারেন্স প্রকারগুলি অন্য সব কিছু অন্তর্ভুক্ত করে। আমরা সেগুলি তৈরি করতে ক্লাস ব্যবহার করি।"

"তুমি একদম ঠিক বলেছো, আমার ছেলে।"

"সুতরাং, আপনি বলছেন আপনি সবকিছু বুঝতে পেরেছেন। আপনার জ্ঞানকে শক্তিশালী করতে আপনাকে সাহায্য করার জন্য এখানে কিছু কাজ রয়েছে।"