मूल्य-प्रकार, पास-पास-मूल्य, संदर्भ-प्रकार और पास-पास-संदर्भ के बीच अंतर के बारे में सोचने का एक अच्छा तरीका यहां दिया गया है:
एक चर एक कंटेनर है।
एक मान-प्रकार चर में एक उदाहरण होता है। एक संदर्भ-प्रकार के चर में कहीं और संग्रहीत उदाहरण के लिए एक सूचक होता है।
एक मूल्य-प्रकार चर को संशोधित करना उस उदाहरण को उत्परिवर्तित करता है जिसमें यह होता है। एक संदर्भ-प्रकार चर को संशोधित करना उस उदाहरण को उत्परिवर्तित करता है जो इसे इंगित करता है।
अलग-अलग संदर्भ-प्रकार चर समान उदाहरण को इंगित कर सकते हैं। इसलिए, उसी उदाहरण को किसी भी चर के माध्यम से उत्परिवर्तित किया जा सकता है जो इसे इंगित करता है।
एक पारित-दर-मूल्य तर्क सामग्री की एक नई प्रति के साथ एक नया कंटेनर है। एक पारित-दर-संदर्भ तर्क अपनी मूल सामग्री के साथ मूल कंटेनर है।
जब एक मान-प्रकार का तर्क पास-पास-मूल्य होता है: तर्क की सामग्री को पुन: असाइन करने से दायरे के बाहर कोई प्रभाव नहीं पड़ता है, क्योंकि कंटेनर अद्वितीय है। तर्क को संशोधित करने से दायरे के बाहर कोई प्रभाव नहीं पड़ता है, क्योंकि उदाहरण एक स्वतंत्र प्रति है।
जब एक संदर्भ-प्रकार का तर्क पास-पास-मान होता है: तर्क की सामग्री को पुन: असाइन करने से दायरे के बाहर कोई प्रभाव नहीं पड़ता है, क्योंकि कंटेनर अद्वितीय है। तर्क की सामग्री को संशोधित करना बाहरी दायरे को प्रभावित करता है, क्योंकि कॉपी किए गए पॉइंटर एक साझा उदाहरण की ओर इशारा करते हैं।
जब कोई तर्क पारित-दर-संदर्भ होता है: तर्क की सामग्री को पुन: सौंपना बाहरी दायरे को प्रभावित करता है, क्योंकि कंटेनर साझा किया जाता है। तर्क की सामग्री को संशोधित करना बाहरी दायरे को प्रभावित करता है, क्योंकि सामग्री साझा की जाती है।
निष्कर्ष के तौर पर:
एक स्ट्रिंग चर एक संदर्भ-प्रकार चर है। इसलिए, इसमें कहीं और संग्रहीत उदाहरण के लिए एक सूचक होता है। जब पास-बाय-वैल्यू, इसके पॉइंटर को कॉपी किया जाता है, तो एक स्ट्रिंग तर्क को संशोधित करना साझा उदाहरण को प्रभावित करना चाहिए। हालाँकि, एक स्ट्रिंग उदाहरण में कोई परिवर्तनशील गुण नहीं है, इसलिए एक स्ट्रिंग तर्क को वैसे भी संशोधित नहीं किया जा सकता है। जब पास-पास-संदर्भ होता है, तो पॉइंटर का कंटेनर साझा किया जाता है, इसलिए पुन: असाइनमेंट अभी भी बाहरी दायरे को प्रभावित करेगा।