Java is NEVER pass-by-reference, right?...right? -


संभव डुप्लिकेट:

मुझे आज एक असामान्य जावा विधि मिली:

  निजी शून्य addShortenedName (ArrayList & lt; स्ट्रिंग & gt; आवाजसैटलिस्ट, स्ट्रिंग बनामनाम) {if (null == vsName) vsName = ""; Else vsName = vsName.trim (); स्ट्रिंग लघुवॉइससैटनाम = vsName.substring (0, मथ.मैन (8, बनामनाम लम्बाई ())); // SCR10638 - रिक्त पंक्तियों के निर्यात को रोकें अगर (shortenedVoiceSetName.length () & gt; 0) {यदि (!! VoiceSetList.contains ("#" + shortenedVoiceSetName)) voiceSetList.add ("#" + shortenedVoiceSetName); }}  

वेरिएबल्स, जटिल ऑब्जेक्ट्स या नहीं पास करने के लिए जावा के व्यवहार के बारे में मैंने जो कुछ पढ़ा है, उसके अनुसार, यह कोड बिल्कुल कुछ नहीं करना चाहिए। तो उम ... क्या मैं यहाँ कुछ याद कर रहा हूं? क्या कुछ सूक्ष्मता है जो मुझ पर खो गई थी, या क्या ये कोड द डेलीवटफ़ से संबंधित है?

के रूप में Rytmis ने कहा , जावा मूल्य से संदर्भ गुजरता है इसका अर्थ यह है कि आप किसी पद्धति के पैरामीटर पर विधिवत रूप से कॉल करने के तरीकों को कॉल कर सकते हैं, लेकिन आप उन्हें फिर से असाइन नहीं कर सकते हैं और मूल्य का प्रचार कर सकते हैं।

उदाहरण:

  private शून्य को बदले हुए बदलाव (कुत्ता कुत्ते) {dog.setColor (Color.BLACK); // अपेक्षित के रूप में काम करता है! } निजी शून्य खराब चेंजडॉग (कुत्ता कुत्ते) {कुत्ते = नया स्टर्बर्ड (); // compiles, लेकिन विधि के बाहर कोई प्रभाव नहीं है  

संपादित करें: इसका मतलब यह है कि हालांकि voiceSetList < Em> हो सकता है इस विधि के परिणामस्वरूप परिवर्तन (इसमें एक नया तत्व जोड़ा जा सकता है), vsName में परिवर्तन विधि के बाहर दिखाई नहीं देगा। भ्रम को रोकने के लिए, मैं अक्सर अपने विधि मापदंडों अंतिम को चिन्हित करता हूं, जो उन्हें विधि के अंदर फिर से निर्दिष्ट किए जाने से (गलती से या नहीं) यह दूसरे संकलन से दूसरे उदाहरण को बनाए रखेगा।


Comments

Popular posts from this blog

python - Overriding the save method in Django ModelForm -

html - CSS autoheight, but fit content to height of div -

qt - How to prevent QAudioInput from automatically boosting the master volume to 100%? -