दिलचस्प पोस्ट
"परतें" और "टायर्स" के बीच अंतर क्या है? एक सरल पोस्ट स्थापित स्क्रिप्ट के साथ distutils का विस्तार कैसे करें? क्या पाइप नाम हैं? आईफोन पर भाषण के लिए पाठ जावास्क्रिप्ट का उपयोग करने के लिए मैं अपने यूएस-885 9 -1 के समकक्ष विशेष यूटीएफ -8 वर्ण कैसे बदलूं? चल रहे मानक विचलन को कुशलतापूर्वक कैसे गणना करें? गरीब आदमी का "लेक्सर" सी # के लिए रेल 4: 404, 500 के लिए कस्टम त्रुटि पृष्ठों और जहां से 500 डिफ़ॉल्ट त्रुटि संदेश आ रहा है? "जीमेल एसएमटीपी सर्वर का इस्तेमाल करते हुए" दूरस्थ प्रमाण पत्र सत्यापन प्रक्रिया के अनुसार अमान्य है PHP का उपयोग करने वाले क्लाइंट का मैक एड्रेस कैसे प्राप्त करें? कैसे php के साथ कर्ल का उपयोग कर फ़ाइल अपलोड करें कैसे listview पंक्ति को अनुकूलित करने के लिए Android आप 'git credential-osxkeychain' में संग्रहीत क्रेडेंशियल कैसे रीसेट करते हैं? एंड्रॉइड में आउटगोइंग कॉल का जवाब मिलने पर पता लगाया नहीं जा सकता Venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, आदि के बीच अंतर क्या है?

संदर्भ से जावा पास

इस 2 कोड के बीच अंतर क्या है:

कोड ए:

Foo myFoo; myFoo = createfoo(); 

कहा पे

 public Foo createFoo() { Foo foo = new Foo(); return foo; } 

बनाम कोड बी:

 Foo myFoo; createFoo(myFoo); public void createFoo(Foo foo) { Foo f = new Foo(); foo = f; } 

क्या इन 2 टुकड़ों के बीच कोई अंतर है?

Solutions Collecting From Web of "संदर्भ से जावा पास"

जावा हमेशा संदर्भ के आधार पर मूल्य से बहस नहीं करता है।


मुझे इस उदाहरण के माध्यम से समझाएं:

 public class Main { public static void main(String[] args) { Foo f = new Foo("f"); changeReference(f); // It won't change the reference! modifyReference(f); // It will modify the object that the reference variable "f" refers to! } public static void changeReference(Foo a) { Foo b = new Foo("b"); a = b; } public static void modifyReference(Foo c) { c.setAttribute("c"); } } 

मैं इसे चरणों में समझाऊंगा:

  1. संदर्भ Foo नाम के एक नाम का घोषित करने और उसे "f" साथ एक प्रकार की Foo नए ऑब्जेक्ट को निर्दिष्ट करें।

     Foo f = new Foo("f"); 

    यहां छवि विवरण दर्ज करें

  2. विधि की ओर से, एक नाम Foo साथ प्रकार Foo का एक संदर्भ घोषित किया जाता है और इसे शुरू में null

     public static void changeReference(Foo a) 

    यहां छवि विवरण दर्ज करें

  3. जैसा कि आप विधि changeReference , संदर्भ a ऑब्जेक्ट को सौंपा जाएगा जो एक तर्क के रूप में पारित किया गया है।

     changeReference(f); 

    यहां छवि विवरण दर्ज करें

  4. एक प्रकार का नाम Foo नामित एक संदर्भ घोषित करना और उसे एक विशेषता "b" साथ Foo एक नए ऑब्जेक्ट के लिए असाइन करना।

     Foo b = new Foo("b"); 

    यहां छवि विवरण दर्ज करें

  5. a = b उस ऑब्जेक्ट के संदर्भ को पुनः निर्दिष्ट नहीं कर रहा है जिसका ऑब्जेक्ट "b"

    यहां छवि विवरण दर्ज करें


  6. जैसा कि आप modifyReference(Foo c) विधि कहते हैं, एक संदर्भ c बनाया गया है और ऑब्जेक्ट के साथ ऑब्जेक्ट को निर्दिष्ट "f"

    यहां छवि विवरण दर्ज करें

  7. c.setAttribute("c"); उस ऑब्जेक्ट की विशेषता को बदल देगा जिसका संदर्भ c इंगित करता है, और यह उसी ऑब्जेक्ट है जिसका संदर्भ f इंगित करता है।

    यहां छवि विवरण दर्ज करें

मुझे आशा है कि आप समझें कि ऑब्जेक्ट्स के रूप में ऑब्जेक्ट्स को जावा में कैसे काम करता है 🙂

चूंकि जावा सख्ती से "मूल्य से गुजारें" है और वस्तुओं के संदर्भ भी मूल्य से पारित किए जाते हैं जो दूसरे कोड अपेक्षित रूप से काम नहीं करेगा इस पर कई चर्चाओं के अधिकार के "संबंधित" अनुभाग देखें

अपने स्वयं के वैरिएबल घोषणाओं के रूप में विधि मापदंडों के बारे में सोचें। यदि आप कोड के एक ब्लॉक के साथ विधि कॉल का स्थान लेना चाहते थे, तो ऐसा लगता है:

 Foo myFoo; { //Method call starts here Foo foo; foo = myFoo; Foo f = new Foo(); foo = f; } //Method call ends here 

यहां तक ​​कि यदि विधि पैरामीटर का एक अन्य नाम के रूप में एक ही नाम है, तो विधि पैरामीटर अभी भी यह स्वयं का है, अद्वितीय संदर्भ है कि केवल विधि के बारे में पता है। यह वही बात है जो Eng.Fouad ऊपर बताता है।

एक अन्य महत्वपूर्ण बिंदु जिसे आपको पता होना चाहिए वह ऑब्जेक्ट प्रकार है जिसे आप विधि में पास करते हैं चाहे वह एक अस्थायी वस्तु या अपरिवर्तनीय वस्तु है यदि आप अपरिवर्तनीय वस्तु जैसे स्ट्रिंग जैसे कोई अन्य प्रतिलिपि बनाते हैं और संशोधन करते हैं तो परिवर्तन आपकी मूल प्रति परिलक्षित नहीं होते हैं