2011-10-28 8 views
19

जब list.addAll(list2) कहा जाता है तो सूची में ऑब्जेक्ट्स सूची में कॉपी की जाएंगी? या सिर्फ उनके संदर्भों की प्रतिलिपि बनाएँ ... javadoc पर कोई स्पष्टीकरण नहीं मिला ...जोड़ देगा जावा में सभी फ़ंक्शन एक प्रतिलिपि बनाते हैं

उत्तर

29

ऑब्जेक्ट्स या उनके डेटा की कोई प्रति नहीं बनाई गई है; उनके संदर्भ सूची वस्तु में बस जोड़े गए हैं।

+0

तो क्या होगा यदि हम बाद में 'list2' में कोई तत्व जोड़ते हैं? क्या इसे स्वचालित रूप से 'सूची' में जोड़ा जाएगा? – iamprem

+0

नहीं, बिल्कुल नहीं। –

+0

मतलब है कि अगर मैंने 'list2' में कोई तत्व संशोधित किया है, तो मुझे आउटपुट' सूची' से संशोधन दिखाई देगा? –

4

नहीं, वस्तुओं की प्रतिलिपि नहीं बनाई जाएगी; उसी ऑब्जेक्ट के संदर्भ सूची में जोड़े जाएंगे।

+0

लेकिन क्या अनुबंध इस पर लागू होता है? मैं देखता हूं कि ऐरेलिस्ट एक उथले प्रतिलिपि के साथ addAll() लागू करता है, लेकिन दस्तावेज़ में कोई विनिर्देश नहीं है। –

+2

@ZiyaoWei यह कहता है कि यह "सभी तत्वों को जोड़ता है", तो यही वह होगा - सभी तत्वों को संलग्न करें। तत्व की एक प्रति तत्व तत्व नहीं है, यह एक प्रति है। –

+0

@ZiyaoWei: जावा में ऑब्जेक्ट की प्रतिलिपि बनाने का कोई सामान्य तरीका नहीं है: C++ में स्वचालित रूप से जेनरेट की गई प्रतिलिपि बनाने वाले कोई भी नहीं हैं, और 'क्लोन()' विधि बहुत कम कक्षाओं द्वारा समर्थित है। इसलिए, एक कंटेनर जो * चाहता था * अपने सभी तत्वों की प्रतिलिपि बनाना चाहता है, वह खुद ऐसा करने में असमर्थ होगा। –

3

आम तौर पर, जावा ऑब्जेक्ट्स की प्रतिलिपि नहीं लेते हैं जब आप ऑब्जेक्ट्स के लिए ऑब्जेक्ट्स के पॉइंटर्स का उपयोग करते हैं।

* लेकिन सावधान रहें! तारों के लिए, अपरिवर्तनीयता के कारण, एक सरणी प्रति मूल स्ट्रिंग मानों को इंगित नहीं करेगी, और आपको यह उम्मीद नहीं करनी चाहिए कि एक स्ट्रिंग में एक पॉइंटर को बदलना जो किसी सरणी सूची में जोड़ा गया था, परिणामस्वरूप सरणी सूची के अंदर एक नया मान होगा।

+0

आप एक प्रतिलिपि कैसे बनायेंगे और जोड़ देंगे? – Jacolack

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