पते को संग्रहीत करके संदर्भ लागू किया जा सकता है। आमतौर पर जावा संदर्भों को संकेत के रूप में लागू किया जाएगा, लेकिन विनिर्देश द्वारा इसकी आवश्यकता नहीं है। वे आसान कचरा संग्रह को सक्षम करने के लिए अप्रत्यक्ष की एक अतिरिक्त परत का उपयोग कर सकते हैं। लेकिन अंत में यह (लगभग हमेशा) (सी-शैली) संकेत (जावा-शैली) संदर्भों के कार्यान्वयन में शामिल होने के लिए नीचे उबाल होगा।
आप संदर्भों के साथ सूचक अंकगणित नहीं कर सकते। सी में एक पॉइंटर और जावा में एक संदर्भ के बीच सबसे महत्वपूर्ण अंतर यह है कि आप वास्तव में जावा में एक संदर्भ के अंतर्निहित मूल्य को प्राप्त (और हेरफेर) नहीं कर सकते हैं। दूसरे शब्दों में: आप सूचक अंकगणित नहीं कर सकते।
सी में आप एक पॉइंटर (यानी पता) में कुछ जोड़ सकते हैं या कुछ चीजों को इंगित करने के लिए कुछ "घटित" कर सकते हैं जो "पास" हैं या उन स्थानों पर इंगित करें जो किसी भी स्थान पर हैं।
जावा में, एक संदर्भ केवल एक चीज और उस चीज की ओर इशारा करता है। आप एक वैरिएबल होल्ड को एक अलग संदर्भ बना सकते हैं , लेकिन आप इसे "मूल चीज़ के बाद की बात" को इंगित करने के लिए नहीं कह सकते।
संदर्भ दृढ़ता से टाइप किए गए हैं। एक और अंतर यह है कि जावा में एक पॉइंटर के प्रकार की तुलना में संदर्भ का प्रकार बहुत अधिक सख्ती से नियंत्रित किया जाता है। सी में आप इसे एक स्थान पर रख सकते हैं int*
और char*
उस स्थान पर मेमोरी को फिर से व्याख्या कर सकते हैं । यही कारण है कि फिर से व्याख्या जावा में काम नहीं करता है: यदि आप केवल कुछ यह है कि के रूप में संदर्भ के दूसरे छोर पर वस्तु की व्याख्या कर सकते पहले से ही है (यानी आप एक डाल सकता Object
के संदर्भ String
संदर्भ केवल तभी वस्तु बताया वास्तव में एक है करने के लिए String
)।
वे अंतर C पॉइंटर्स को अधिक शक्तिशाली बनाते हैं, बल्कि अधिक खतरनाक भी होते हैं। उन दोनों संभावनाओं (सूचक अंकगणितीय और इंगित किए जा रहे मूल्यों की फिर से व्याख्या) सी में लचीलापन जोड़ते हैं और भाषा की शक्ति के कुछ स्रोत हैं। लेकिन वे कर रहे हैं भी समस्याओं का बड़ा स्रोत हैं, अगर गलत इस्तेमाल वे आसानी से मान्यताओं कि आपके कोड आसपास बनाया गया है तोड़ सकते हैं क्योंकि। और उन्हें गलत तरीके से उपयोग करना बहुत आसान है।