2013-02-12 6 views
7
new String[] { "foo", "bar" }.clone(); 
मेरी पसंदीदा आईडीई (यानी ग्रहण) के साथ

, मैं Ctrl-क्लिक करके उस पर (हमेशा की तरह) से ऊपर clone() विधि के स्रोत कोड देखना चाहता था, लेकिन यह मुझे Object की देशी पर लाए गए , जो केवल हस्ताक्षर प्रदान करता है न कि विधि का शरीर।स्रोत कोड की खोज में: एरे के क्लोन() विधि को लागू किया गया है?

स्वत: पूर्ण मुझसे कहा था कि कहा clone() विधि String वर्ग (clone() : String[] - String) के थे, लेकिन String वर्ग के स्रोत कोड इस तरह के एक तरीका प्रदान नहीं करता है (के बाद से मैं String[] वर्ग के साथ काम कर रहा हूँ ...)।

तो, यह कार्यान्वयन कहाँ छुपा रहा है? क्या स्वत: पूर्ण होना चाहिए?

+1

आप एक सरणी पर क्लोन बुला रहे हैं, एक स्ट्रिंग पर नहीं। – assylias

+2

'क्लोन'' java.lang.Object' की 'मूल' विधि है, यह सभी वस्तुओं पर काम करता है। अनिवार्य प्रकटीकरण: [क्लोन टूट गया है] (http://www.artima.com/intv/bloch13.html)। – dasblinkenlight

+0

कृपया लिंक http://stackoverflow.com/questions/6825982/how-does-clone-work-under-the-hood – user1428716

उत्तर

8

एक सरणी क्लोन करने के लिए कोड JVM में है (यह एक मूल विधि है)। हॉटस्पॉट के लिए, यह jvm.cpp के 550/560 के आसपास है।

0

भ्रमित करने वाला यह है कि ग्रहण कहता है कि cloneString सरणी के लिए विधि String कक्षा में है। लेकिन length स्ट्रिंग सरणी का तरीका String[] से है।

enter image description here

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