2011-04-14 33 views
6

मान लिया जाये कि मैं इस तरह से बनाया ArrayLists की एक ArrayList है:क्या ArrayList.clear() सभी निहित objecs को भी हटा देता है?

ArrayList< ArrayList<String> > listOfListsOfStrings = 
           new ArrayList< ArrayList<String> >(); 

अगर मैं फोन:

listOfListsOfStrings.clear(); 

बाद में तार के किसी भी एक्सेस करने के प्रयास करेंगे listOfListsOfStringsहमेशा परिणाम अंदर java.lang.NullPointerException में?

+1

इसे आज़माएं और देखें कि क्या होता है। यदि यह आपके द्वारा अपेक्षित तरीके से काम नहीं करता है तो अपना डेमो कोड पोस्ट करें जो समस्या दिखाता है। जैसा कि आप जवाब देख सकते हैं नहीं, यह अपवाद नहीं करेगा। तो अगर आपको अपवाद मिल रहा है तो इसका मतलब है कि आपके पास कोडिंग समस्या है और आप "क्या होगा" प्रश्न पूछकर आगे नहीं हैं। यही कारण है कि आपको हमेशा इसे स्वयं का प्रयास करना चाहिए। यह कोड की 10 लाइनों से कम होना चाहिए। – camickr

उत्तर

3

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

+0

धन्यवाद। आपके उत्तर ने मुझे इस अविश्वसनीय उत्तर को खोजने में मदद की जिसने मुझे एक पागल के स्रोत को खोजने में मदद की जो मुझे पागल कर रहा था: http://stackoverflow.com/questions/333151/java-how-to-pass-byte-by-reference/333217 # 333217 यह पता चला है कि जावा में मैं संदर्भ के संदर्भ को पास नहीं कर सकता ... इसलिए जब मैंने एक सुपरक्लास विधि को भरने के लिए एक ऐरेलिस्टिस्ट पैरामीटर पारित किया, तो वास्तव में यह एक अलग सरणी भर रहा था ... अब सब ठीक है । – an00b

+0

और यह आलेख मेरे जैसे भविष्य में n00bs की सहायता करने में सक्षम हो सकता है: http://javadude.com/articles/passbyvalue.htm – an00b

+0

आपका स्वागत है :) एक साइड नोड के रूप में, हालांकि जावा पास-दर-मान है वास्तव में क्या है यदि आप ऑब्जेक्ट्स का उपयोग करते हैं तो पैरामीटर संदर्भ के रूप में पारित किया जाता है। इस प्रकार आप किसी ऑब्जेक्ट को विधि में पास कर सकते हैं और इसे संशोधित कर सकते हैं, लेकिन आप ऑब्जेक्ट को पास किए गए संदर्भ में असाइन नहीं कर सकते हैं। सी/सी ++ के संदर्भ में आप किसी वस्तु को मूल्य के आधार पर पॉइंटर पास करेंगे। - उन बग को कम करने या संकलक बनाने में एक संभावना है कि आप सभी पैरामीटर को अंतिम के रूप में चिह्नित करना होगा (ग्रहण स्वचालित रूप से इसके लिए कर सकता है)। यदि आप पैरामीटर को एक अलग मान निर्दिष्ट करते हैं तो संकलक शिकायत करेगा। – Thomas

1

नहीं, यदि आपके पास अभी भी बाहरी संदर्भ हैं तो यह ArrayList में ऑब्जेक्ट्स को हटा नहीं देगा। ArrayList.clear() वस्तुओं को तब तक कुछ भी नहीं करता जब तक वे अनाथ नहीं होते हैं, इस मामले में आप बाद में उनका जिक्र नहीं करेंगे।

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