2012-04-12 16 views
5

मुझे यकीन नहीं है कि निम्नलिखित के परिणामस्वरूप गहरी या उथली प्रतिलिपि होगी?क्या सरणी पर क्लोन विधि गहरी या उथली प्रतिलिपि है?

public void viewImages(final String[] instancesFilename) { 

    String[] instances = (String[])instancesFilename.clone();  
} 

क्या स्ट्रिंग सरणी की गहरी प्रतिलिपि बनाने का एक सरल और तेज़ तरीका है?

उत्तर

14

जावा में स्ट्रिंग्स अचूक हैं (उनके मूल्य को नहीं बदला जा सकता है)। तो स्ट्रिंग की प्रतिलिपि करते समय गहरी और उथली प्रतिलिपि के बीच कोई पता लगाने योग्य अंतर नहीं है।

और केवल आगे संदर्भ के लिए: प्रति उथला होगा लेकिन यह कोई समस्या नहीं होनी चाहिए क्योंकि स्ट्रिंग्स अचूक हैं।

ओह और हास्यास्पद तथ्य: तारों को क्लोन विधि के साथ क्लोन नहीं किया जा सकता है, इसलिए यदि आप क्लोन विधि के साथ स्ट्रिंग की गहरी प्रतिलिपि करने का प्रयास करते हैं, तो आपको CloneNotSupportedException मिलेगा।

+0

लेखक 'स्ट्रिंग [] 'की प्रतिलिपि बनाने के लिए कह रहा है, न कि' स्ट्रिंग '। 'InstancesFilename' के तत्वों को बाद में बाहर से बदला जा सकता है, इसलिए ओपी सरणी की एक प्रति बनाना चाहता है। –

+0

वैसे यह * पता लगाने योग्य * है (संदर्भ समान हैं) लेकिन यदि आप तारों का सही ढंग से उपयोग कर रहे हैं, तो यह * महत्वपूर्ण * नहीं होना चाहिए। –

+0

@ फिलिप रिचर्ट: लेकिन ओपी पहले से ही क्लोन कर रहा है - उस संदर्भ में "गहरी प्रति" बनाम "उथली प्रतिलिपि" केवल तभी हो सकती है कि तारों को क्लोन किया गया हो या नहीं - और जैसा कि यह उत्तर बताता है, यह लगभग हमेशा महत्वहीन है। –

2

सरणी कक्षा में copyOf विधि भी है। आम तौर पर मैं सरणी की प्रतियां बनाने के लिए उपयोग करता हूं। सभी मतभेदों का विवरण और स्पष्टीकरण: http://forum.codecall.net/topic/49450-copying-arrays/

1

यहां एक दिलचस्प article discussing using serialization to make deep copies है।

कॉल ग्राफ़ में ऑब्जेक्ट्स को क्रमशः समर्थन करने की आवश्यकता होती है हालांकि कई प्रकार के 3 प्रकार के अनुप्रयोगों में, आवश्यकता होती है।

लेख कुछ आरेखों के साथ गहरी प्रति और उथले प्रतिलिपि की चर्चा प्रदान करता है।

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