2013-02-12 5 views
7
new String[] { "foo", "bar" }.clone(); 

Con il mio IDE preferito (ad esempio Eclipse), ho voluto vedere il codice sorgente del metodo di cui sopra clone() da Ctrl-clic su di essa (come al solito), ma mi ha portato a un nativo 's il Object , che fornisce solo la firma e non il corpo del metodo.Alla ricerca del codice sorgente: dove è implementato il metodo clone() degli array?

Il completamento automatico mi ha detto che il suddetto metodo di clone() apparteneva alla classe String (clone() : String[] - String), ma il codice sorgente della classe String non fornisce tale metodo (da quando ho a che fare con la classe String[] ...).

Quindi, dove si nasconde questa implementazione? Dovrebbe essere risolto il completamento automatico?

+1

si chiedono clone su un array, non su una stringa. – assylias

+2

'clone' è un metodo' nativo' di 'java.lang.Object', funziona su tutti gli oggetti. Divulgazione obbligatoria: [clone è rotto] (http://www.artima.com/intv/bloch13.html). – dasblinkenlight

+0

Inoltre, fare riferimento al collegamento http://stackoverflow.com/questions/6825982/how-does-clone-work-under-the-hood – user1428716

risposta

8

Il codice per clonare un array è nella JVM (è un metodo nativo). Per hotspot, è intorno alle linee 550/560 di jvm.cpp.

0

Ciò che confonde è che Eclipse afferma che il metodo clone per un array String è nella classe String. Ma il metodo length dell'array String è da String[].

enter image description here

Problemi correlati