दिलचस्प पोस्ट
sed – `एस के लिए अज्ञात विकल्प ' फ्रेमवर्क मॉड्यूल के अंदर गैर मॉड्यूलर हैडर शामिल करें विंडोज पॉवरहेल में यूनिक्स पूंछ के बराबर कमांड मुझे GET या POST पद्धति का उपयोग कब करना चाहिए? उन दोनों के बीच अंतर क्या है? स्ट्रिंग के अंदर बैकस्लैश प्राप्त करें – जावास्क्रिप्ट लिस्ट बॉक्स आइटम वापसी स्ट्रिंग, जब DataTemplate बटन है अक्षरों, संख्याओं, रिक्त स्थान और अंडरस्कोर के अलावा सभी वर्णों को बदलें स्टोरीबोर्ड के बिना एक्सकोड 6 में रिक्त एप्लिकेशन कैसे बनाएं मैं विंडोज पर कमांड लाइन से जावा प्रोग्राम कैसे चलाऊँ? मैं एक "दूसरी प्रक्रिया द्वारा उपयोग" अपवाद प्राप्त करने पर भी एक फाइल कैसे पढ़ सकता / सकती हूं? मैं एक जावा एप्लिकेशन कैसे लिख सकता हूं जो खुद रनटाइम पर अपडेट कर सकता है? जीआईटी कमांड को दिखाने के लिए कि कौन सा विशिष्ट फाइलें उपेक्षा की जाती हैं स्थानीय टाइलों का उपयोग करके टाइल प्रदाता एक्सएमएल स्किमा मिन ओककर्स / मैक्स ओकेर्स डिफ़ॉल्ट मान नामित तर्कों के साथ एक उद्देश्य सी फ़ंक्शन को कॉल करने के लिए objc_msgSend का उपयोग करना

क्या मैं जावा में संदर्भ के आधार पर पैरामीटर पास कर सकता हूं?

मुझे C# के ref कीवर्ड के समान सिमेंटिक चाहिए

वेब के समाधान से एकत्रित समाधान "क्या मैं जावा में संदर्भ के आधार पर पैरामीटर पास कर सकता हूं?"

जावा भ्रामक है क्योंकि सब कुछ मूल्य से पारित किया जाता है । हालांकि संदर्भ प्रकार (यानी आदिम प्रकार का कोई पैरामीटर नहीं) के पैरामीटर के लिए यह संदर्भ ही है जिसे मूल्य से पारित किया जाता है, इसलिए यह पास-बाय-संदर्भ (और लोग अक्सर दावा करते हैं कि यह है) लगता है। यह मामला नहीं है, जैसा कि निम्नानुसार दिखाया गया है:

 Object o = "Hello"; mutate(o) System.out.println(o); private void mutate(Object o) { o = "Goodbye"; } //NOT THE SAME o! 

Hello को कंसोल पर प्रिंट करेगा विकल्प यदि आप चाहते हैं कि उपरोक्त कोड को Goodbye प्रिंट करना चाहते हैं तो निम्नानुसार एक स्पष्ट संदर्भ का उपयोग करना है:

 AtomicReference<Object> ref = new AtomicReference<Object>("Hello"); mutate(ref); System.out.println(ref.get()); //Goodbye! private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); } 

क्या मैं जावा में संदर्भ के आधार पर पैरामीटर पास कर सकता हूं?

नहीं।

क्यूं कर ? जावा में तरीकों के लिए तर्कों को पास करने का केवल एक ही तरीका है: मान द्वारा।

ध्यान दें:

पुरालेखों के लिए यह समझना आसान है: आपको मूल्य की एक प्रति मिलता है।

अन्य सभी के लिए आप संदर्भ की प्रति प्राप्त करते हैं और इसे मूल्य से गुजरते हुए भी कहा जाता है।

यह इस तस्वीर में है:

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

जावा में रेफरी के समान भाषा के स्तर पर कुछ भी नहीं है जावा में केवल मूल्य अर्थ से गुजर रहा है

जिज्ञासा की खातिर आप जावा में एक रेफ-टाइप सिमेंटिक को एक अस्थिर वर्ग में अपनी ऑब्जेक्ट लपेट कर सकते हैं:

 public class Ref<T> { private T value; public Ref(T value) { this.value = value; } public T get() { return value; } public void set(T anotherValue) { value = anotherValue; } @Override public String toString() { return value.toString(); } @Override public boolean equals(Object obj) { return value.equals(obj); } @Override public int hashCode() { return value.hashCode(); } } 

परीक्षण का मामला:

 public void changeRef(Ref<String> ref) { ref.set("bbb"); } // ... Ref<String> ref = new Ref<String>("aaa"); changeRef(ref); System.out.println(ref); // prints "bbb" 

"जावा प्रोग्रामिंग भाषा" में जेम्स गोस्लिंग से:

"… जावा में वास्तव में एक पैरामीटर पासिंग मोड है – मूल्य से गुजारें – और वह चीजों को सरल रखता है .."

मुझे नहीं लगता कि आप कर सकते हैं आपका सबसे अच्छा विकल्प हो सकता है कि वह चीज जिसे आप "रेफरी द्वारा" दूसरे वर्ग के उदाहरण पर उत्तीर्ण करना चाहते हैं, और (बाहरी) कक्षा के संदर्भ (मान द्वारा) को पास करना चाहते हैं। मेरा क्या मतलब है अगर आप वह समझ सकें…

अर्थात् आपका तरीका उस ऑब्जेक्ट की आंतरिक स्थिति को बदलता है जिसे पारित किया जाता है, जो फिर कॉलर को दिखाई देता है।

जावा हमेशा मूल्य से पास होता है

जब आप एक आदिम को पास करते हैं, तो यह मूल्य की एक प्रति है, जब आप ऑब्जेक्ट पास करते हैं, तो यह संदर्भ सूचक की एक प्रति है।

एक अन्य विकल्प एक सरणी का उपयोग करना है, जैसे void method(SomeClass[] v) { v[0] = ...; } void method(SomeClass[] v) { v[0] = ...; } लेकिन 1) सरणी को विधि लागू करने से पहले आरंभ किया जाना चाहिए, 2) फिर भी कोई भी इस तरह स्वैप विधि को लागू नहीं कर सकता … इस तरह का उपयोग जेडीके में किया जाता है, जैसे java.util.concurrent.atomic.AtomicMarkableReference.get(boolean[])