2010-09-02 7 views

Respuesta

4

Usted debe distinguir entre dos tipos de copia: poco profunda yprofunda.

Mientras la copia profunda asigna nuevo espacio para toda la matriz y todo su contenido (si contiene referencias, se asigna espacio nuevo para crear instancias con los mismos valores que los copiados), la copia superficial solo asigna espacio con la misma tamaño de la matriz copiada.

Ejemplo:

matriz A se han asignado para contener sólo dos mutable objects (por ejemplo .: una lista o un ArrayList). ¿Desea tener solo una copia de la matriz "extern" (la que contiene las dos referencias) o desea una copia profunda, que asignará también nuevas instancias de las dos referencias contenidas en A?

En el primer caso, por ejemplo:

A es la matriz a partir de la referencia 0x0000AA

ElementOne comienza en 0x00BBCC

ElementTwo comienza en 0x00BBFF

Si ejecuta una copia superficial :

B (la nueva matriz) comenzará en la referencia 0x0000BB, ElementsOne y ElementsTwo apuntará a las referencias antiguas (0x00BBCC, 0x00BBFF).

Si ejecuta una copia profunda, no solo asigna el nuevo espacio para la matriz, sino que también asigna espacio para contener las nuevas instancias (una nueva lista, una nueva lista de matrices ...).

+0

buen ejemplo bueno para entender – selvaraj

3

Solo se copian los elementos de la matriz. Si son tipos de referencia, solo se copia la referencia . Cualquier subtipo o elemento del objeto detrás de la referencia es no copiado.

5

Si tiene referencias en ArrayList, las mismas referencias se copiarán en ArrayList clonado. Los objetos no serán clonados.

Cuestiones relacionadas