हैलो, अमीगो! मैं आपको वेरिएबल्स की आंतरिक संरचना के बारे में बताना चाहता हूं। जैसा कि आप पहले से ही जानते हैं, प्रत्येक वेरिएबल मेमोरी के एक क्षेत्र से जुड़ा होता है जहां उसका मान संग्रहीत होता है। "

"हाँ। आपने मुझे पिछली बार इसके बारे में बताया था।"

"बहुत अच्छा। यह अच्छा है कि तुम याद करते हो। मैं आगे बढ़ूंगा।"

"सभी सम्मिश्र प्रकारों में सरल प्रकार होते हैं। और वे, अपनी बारी में, और भी सरल प्रकारों से मिलकर बने होते हैं। अंत में, हम आदिम प्रकारों के साथ समाप्त होते हैं , जिन्हें और अधिक सरलीकृत नहीं किया जा सकता है। यही वे कहलाते हैं - आदिम प्रकार । उदाहरण के लिए, int एक आदिम प्रकार है, लेकिन String एक समग्र प्रकार है जो अपने डेटा को वर्णों की तालिका के रूप में संग्रहीत करता है (जहाँ प्रत्येक वर्ण एक आदिम प्रकार का char है )।

"बहुत दिलचस्प। आगे बढ़ो।"

"समग्र प्रकार सरल लोगों को समूहित करके बनते हैं। हम इस प्रकार के वर्गों को कहते हैं। जब हम एक कार्यक्रम में एक नई कक्षा को परिभाषित करते हैं, तो हम एक नए समग्र डेटा प्रकार की घोषणा करते हैं । इसके डेटा या तो अन्य मिश्रित प्रकार या आदिम प्रकार होंगे।"

जावा कोड विवरण
public class Person
{
   String name;
   int age;
}
एक नया समग्र प्रकार घोषित किया गया है - Person.
इसका डेटा String(कंपोजिट टाइप) वेरिएबल nameऔर int(प्रिमिटिव टाइप) वेरिएबल में स्टोर होता हैage
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;
हम एक व्यक्ति चर बनाते हैं जिसका मान शून्य है।
हम इसे नव निर्मित व्यक्ति वस्तु का पता प्रदान करते हैं।
हम वेरिएबल को null असाइन करते हैं।
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
हम एक कैट ऑब्जेक्ट बनाते हैं और इसके एड्रेस को वेरिएबल कैट में स्टोर करते हैं; cat.owner शून्य के बराबर है।
हम एक नए बनाए गए व्यक्ति वस्तु के पते के बराबर cat.owner सेट करते हैं।
cat.owner.name अभी भी शून्य के बराबर है।
हमने cat.owner.name को "भगवान" के बराबर सेट किया

"क्या मैंने आपको सही ढंग से समझा? चर दो प्रकारों में विभाजित हैं: आदिम प्रकार और संदर्भ प्रकार। आदिम प्रकार सीधे मूल्यों को संग्रहीत करते हैं, जबकि संदर्भ प्रकार किसी वस्तु के संदर्भ को संग्रहीत करते हैं। आदिम प्रकारों में int, char, बूलियन और कई अन्य शामिल हैं। संदर्भ प्रकार में बाकी सब कुछ शामिल है। हम उन्हें बनाने के लिए कक्षाओं का उपयोग करते हैं।"

"तुम बिल्कुल ठीक कह रहे हो मेरे लड़के।"

"तो, आप कहते हैं कि आप सब कुछ समझ गए हैं। यहाँ कुछ कार्य हैं जो आपके ज्ञान को सुदृढ़ करने में आपकी सहायता करेंगे।"