तो, अपने सवालों के जवाब देने के लिए आपको सबसे पहले यह पता होना चाहिए कि जावा वेरिएबल्स कैसे पास करता है। जबकि चर पी बनाई व्यक्ति की स्मृति पता होता है,
int i = 1234;
Person p = new Person("Peter");
अब, चर मैं वास्तव में 1234 में शामिल हैं:
एक चर एक मूल्य है।
इसलिए मेरे पास 1234 है और पी में एड्रेस है (चलिए ए 4 डीएफआई 3 कहें)।
anyMethodYouLike(p);
System.out.println(p.getName());
public void anyMethodYouLike(Person somePerson) {
somePerson.rename("Homer");
}
इसलिए इस उदाहरण में, हम विधि को किसी भी विधि देते हैं जैसे वे परिवर्तनीय पी ... प्रतीक्षा करें! हम विधि को वेरिएबल (a4dfi3) का मान देते हैं। विधि फिर इस वैरिएबल पर नाम बदलती है (जिसमें अभी भी पी के समान एड्रेस है, इसलिए यह उसी व्यक्ति को संशोधित करता है जो पी पॉइंट्स को इंगित करता है)। तो, विधि के बाद, व्यक्ति का नाम पी इंगित करता है, मुद्रित हो जाता है, जिसके परिणामस्वरूप "होमर" होता है।
someOtherMethod(p);
System.out.println(p.getName());
public void someOtherMethod(Person somePerson) {
somePerson = new Person("Walter");
}
इस उदाहरण में हम अभी भी विधि के लिए "पीटर" नामक हमारे व्यक्ति का पता लगाते हैं। लेकिन इस बार, विधि कुछ पर्सन में एक नया व्यक्ति बनाती है (इसलिए कुछ पर्सन में एड्रेस को ओवरराइड करना .. चलिए 13n37s कहें। लेकिन!A4dfi3 पर व्यक्ति बदला नहीं गया था! प्रिंट कॉल अभी भी "पीटर" आउटपुट करता है और "वाल्टर" नहीं।
अब, चलो देखते हैं कि यह कैसे पुरातन साथ बर्ताव करते हैं:
someMethod(i);
System.out.println(i);
public void someMethod(int someInt) {
someInt++;
}
तो, मैं के मूल्य (1234) someInteger के लिए पारित हो जाता है। फिर कुछ इंटेगर 1235 तक बढ़ जाता है। लेकिन मैं अभी भी 1234 है।
जावा में ऑब्जेक्ट्स और प्राइमेटिव्स के बीच यह बड़ा अंतर है।
अब आपके प्रश्नों के लिए: 1. जैसा कि आप यहां पढ़ सकते हैं, हाँ जावा हमेशा ऑब्जेक्ट के संदर्भ एड्रेस को पास करता है। 2. यदि आप नहीं चाहते हैं कि किसी को आपके ऑब्जेक्ट्स के मूल्यों से गड़बड़ हो, तो आपको पहले उस जानकारी के साथ एक नया ऑब्जेक्ट बनाना होगा (उदाहरण के लिए क्लोनेबल और क्लोन()), लेकिन यह एक वास्तविक गड़बड़ है क्योंकि आपको बनाना है निश्चित रूप से, कि आपके ऑब्जेक्ट में जो कुछ भी प्राचीन नहीं है, वह फिर से बनाया जाता है, जो आपके ऑब्जेक्ट्स के विशाल पेड़-संरचनाओं में बहुत भयानक होता है।
मुझे आशा है कि मैं मदद कर सकता है, Ferdi265
... या ऑब्जेक्ट को अपरिवर्तनीय बनाने के लिए डिज़ाइन किया गया है। –
@ माइकल बोर्गवर्ड: महान बिंदु। मुझे लगता है कि इसे उत्तर में जोड़ने से सवाल पूछने वाले व्यक्ति को भ्रमित कर दिया जाएगा ... –
संदर्भ द्वारा पारित एक सरणी है? जहां तक मुझे पता है, यह एक प्राचीन प्रकार है, लेकिन यह उत्परिवर्तनीय है। – bigblind