2017-02-10 10 views
6

मैं एक चीज के बारे में सोच रहा था जो कल मेरे दिमाग में कूद गया था।
मैं भ्रामक शीर्षक के लिए पहले से माफ़ी मांगता हूं, लेकिन मुझे वास्तव में यह नहीं पता कि इसका अधिकार कैसे प्राप्त किया जाए।

अच्छा, मान लें कि हम दो ऑब्जेक्ट्स ObjA और ObjB हैं, और उदाहरण के लिए, ObjB में एक विधि है जो ObjA ऑब्जेक्ट को तर्क के रूप में लेती है।

हम इस (भाषा के रूप में जावा लेने) कर सकते हैं:बेनामी चर (?) फायदे?

ObjA instanceA = new ObjA(); 
ObjB instanceB = new ObjB(); 

instanceB.method(instanceA); 

या

new ObjB().method(new ObjA()); 

मान लें यह कुछ समारोह के शरीर है, इसलिए वस्तुओं नष्ट हो जाएगा जब दायरे से बाहर जा रहा है ।

मेरा प्रश्न है:
क्या हमें एकवचन वस्तुओं को तत्काल नहीं करने और दूसरे कोड के लिए निहित रूप से कॉल करके प्रदर्शन लाभ मिलता है?
क्या यह पठनीयता बलिदान कुछ लायक है?
या यह सब कुछ के लिए नहीं है क्योंकि अंतर्निहित रूप से बनाई गई वस्तुओं को स्मृति में संग्रहीत किया जाएगा और वैसे भी दायरे से मर जाएगा?


नोट: मुझे नहीं पता कि मैं "निहित" या "अज्ञात" के साथ सही कह रहा हूं, लेकिन मुझे Google पर बहुत कुछ नहीं मिला है।

+2

जावा में, इससे प्रदर्शन की कोई फर्क नहीं पड़ता। आप दोनों संस्करणों के लिए जेनरेट किए गए बाइटकोड को सुनिश्चित करने के लिए देख सकते हैं।लेकिन एक सामान्य नियम के रूप में: जो भी अधिक पठनीय है उसका उपयोग करें। – Axel

+4

आप अभी भी वस्तुओं की एक ही संख्या को तुरंत चालू कर रहे हैं। 'New' शब्द वाले बिट्स तत्काल हैं, भले ही आप चर निर्दिष्ट नहीं करते हैं। – khelwood

+2

कोई भी लाभ नहीं है। यहां तक ​​कि अगर वहां भी, यह इतना छोटा होगा कि आप इस तरह कुछ पर ध्यान केंद्रित करने में अपना समय बर्बाद कर देंगे। – Kayaman

उत्तर

6

बिल्कुल कोई अंतर प्रदर्शन नहीं है।

लेकिन कुछ मामलों में, आपको पहले प्रकार का उपयोग करने के लिए मजबूर किया जाएगा।

पूर्व के लिए:

ObjA instanceA = new ObjA(); 
// Do something with instanceA 
instanceB.method(instanceA); 

आप बीच में कोई लेना देना नहीं है, तो मैं सिर्फ कोड की एक पंक्ति को बचाने के लिए दूसरा तरीका उपयोग कर सकते हैं।

+0

तो यह कुछ मामलों में – magicleon

+0

@magicleon हाँ की पठनीयता और संख्याओं की संख्या है। –

1

नामित चर का उपयोग करने वाला पहला दृष्टिकोण आवश्यक है यदि आपको ऑब्जेक्ट को नई ऑब्जेक्ट्स बनाने के बिना कई बार उपयोग करने की आवश्यकता है या किसी ऑब्जेक्ट को वापस करने के किसी ऑब्जेक्ट को लौटने की आवश्यकता है, तो जोखिम होने पर (उदाहरण के लिए बहु -थ्रेडिंग) परिणाम अगली बार अलग होगा। अन्य मामलों में अज्ञात ऑब्जेक्ट्स का उपयोग करना अधिक सुविधाजनक होता है क्योंकि उनका दायरा समान होता है और अनइडेड पहचानकर्ताओं के साथ कोई नेमस्पेस अव्यवस्था नहीं होती है।

2

इस मामले में पठनीयता एकमात्र लाभ एकमात्र तरीका है।

कोई महत्वपूर्ण प्रदर्शन या स्मृति नहीं है benefit.If आप एक स्थानीय चर में एक संदर्भ की दुकान और फिर विधि आह्वान, वहाँ संदर्भ के भंडारण के लिए एक अत्यंत छोटे प्रदर्शन जुर्माना हो सकता है।

अज्ञात ऑब्जेक्ट बनाया गया है और तत्काल मर जाता है। लेकिन, गुमनाम वस्तुओं अभी भी साथ काम निकाला जा सकता है इससे पहले कि यह एक विधि गुमनाम वस्तु का उपयोग कर बुला की तरह मर जाता है:

new ObjB().method(new ObjA()); 

हम दो बार या उससे अधिक गुमनाम वस्तु के रूप में उपयोग नहीं कर सकते मर जाता है तुरंत अपनी नियत कार्य करने के बाद।

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