2011-08-14 9 views
7

क्यों काम नहीं करेगा यह एक बात है जिसे मैं नहीं बता सकता कि मुझे आश्चर्य है कि यह काम नहीं करेगा, लेकिन फिर भी मेरे लिए इस मामले की व्याख्या करना दिलचस्प है । कल्पना कीजिए हम एक वस्तु है:जावा ऑब्जेक्ट को एक अलग विधि में प्रारंभ करना: यह

SomeClass someClass = null; 

और एक विधि है कि एक पैरामीटर के रूप इस वस्तु ले यह प्रारंभ करने में होगा:

public void initialize(SomeClass someClass) { 
    someClass = new SomeClass(); 
} 

और फिर जब हम कहते हैं:

initialize(someClass); 
System.out.println("" + someClass); 
यह

प्रिंट करेगा:

null 

आपके उत्तरों के लिए धन्यवाद!

+0

संभावित डुप्लिकेट [क्या संदर्भ द्वारा जावा पास है?] (Http://stackoverflow.com/questions/40480/is-java-pass-by-reference) – Mat

+0

संभव डुप्लिकेट [क्या मैं जावा में संदर्भ द्वारा पैरामीटर पास कर सकता हूं ?] (http://stackoverflow.com/questions/1068760/can-i-pass-parameters-by-reference-in-java) –

+0

कोई प्रश्न चिह्न नहीं है –

उत्तर

9

जावा में करना असंभव है। सी # में आप ref या out कीवर्ड का उपयोग करके पैरामीटर पास करेंगे। जावा में ऐसे कोई कीवर्ड नहीं हैं। आप विवरण के लिए यह प्रश्न देख सकते हैं: Can I pass parameters by reference in Java?

संयोग से, इसी कारण से आप जावा में एक स्वैप फ़ंक्शन नहीं लिख सकते हैं जो दो पूर्णांक स्वैप करेगा।

1

जैसा कि आर्मेन ने बताया है, आप जो करना चाहते हैं वह इस तरह से संभव नहीं है। ऐसा क्यों है प्रारंभ करने में एक factory method?

0

और एक विधि है कि एक पैरामीटर के रूप इस वस्तु ले जाएगा का उपयोग नहीं:

विधि अपने मामले में पैरामीटर के रूप में एक वस्तु नहीं लेता है। यह एक संदर्भ लेता है जो शून्य को इंगित करता है। फिर यह इस संदर्भ की प्रतिलिपि बनाता है और इसे SomeClass के नए उदाहरण पर इंगित करता है। लेकिन जाहिर है, पैरामीटर के रूप में पारित संदर्भ अभी भी शून्य पर इंगित करता है।

संबंधित मुद्दे