2012-04-12 13 views

Respuesta

14

Las cadenas en Java son imputables (No se puede cambiar su valor). Entonces, no hay diferencia detectable entre una copia profunda y superficial cuando se copian cadenas.

Y solo como referencia adicional: La copia será poco profunda pero eso no debería ser un problema ya que las cadenas son imputables.

Oh, y hecho curioso: las cadenas no se pueden clonar con el método de clonación, por lo que si intenta hacer una copia profunda de las cadenas con el método de clonación, obtendrá una CloneNotSupportedException.

+0

El autor está pidiendo copiar 'String []', not 'String'. Los elementos de 'instancesFilename' podrían cambiarse más tarde desde el exterior, por lo que OP quiere crear una copia de la matriz. –

+0

Bueno, es * detectable * (son las referencias iguales) pero si usa las cadenas correctamente, no debería ser * significativo *. –

+0

@PhilippReichart: Pero el OP ya está realizando un clon - "copia profunda" vs "copia superficial" en ese contexto solo puede tratarse de si las cadenas están clonadas o no - y como dice esta respuesta, casi siempre es poco importante. –

1

Aquí hay un interesante article discussing using serialization to make deep copies.

Los objetos en el gráfico de llamadas necesitan compatibilidad con la serialización; sin embargo, en muchos tipos de negocios de aplicaciones de 3 niveles, esa necesidad existe.

El artículo proporciona una explicación de la copia profunda y la copia superficial con algunos diagramas.

Cuestiones relacionadas