"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Cópia profunda vs. cópia superficial vs. clone em java: qual é a diferença e quando devo usar cada um?

Cópia profunda vs. cópia superficial vs. clone em java: qual é a diferença e quando devo usar cada um?

Postado em 2025-02-06
Navegar:411

 Deep Copy vs. Shallow Copy vs. Clone in Java: What\'s the Difference and When Should I Use Each?

cópia profunda vs. cópia superficial vs. clone em java

em java, "cópia profunda", "cópia rasa" e " O clone "são frequentemente usados, mas termos mal definidos. Cada conceito requer esclarecimento para garantir o entendimento adequado. ] e

copiando objetos

:

copiando um valor: copiando um valor de um tipo de referência envolve atribuir a referência do objeto, semelhante a copiar um número inteiro. &&&] copiando um objeto: Criando um novo objeto, com sua própria identidade, envolve o uso de "new" "explícita ou implicitamente. Cópia profunda dos objetos

  • cópia superficial:
  • Um novo objeto é criado com os mesmos valores que o original, mas as referências aos objetos incorporados são compartilhados.
  • cópia profunda:
  • Um novo objeto é criado com os mesmos valores que o original, mas as referências a objetos incorporadas também são copiadas, resultando em uma duplicação completa de toda a rede de objetos.

Considere o seguinte exemplo:

    Exemplo de classe { int foo; int [] bar; ... } Exemplo Eg1 = novo exemplo (1, novo int [] {1, 2}); Exemplo Eg2 = ...
  • Uma cópia superficial do EG1 seria:
  • Exemplo Eg2 = Novo Exemplo (Eg1.foo, Eg1.bar); Uma cópia profunda do EG1 seria:

Exemplo Eg2 = novo exemplo (Eg1.foo, Arrays.copy (Eg1.bar));

class Example {
  int foo;
  int[] bar;
  ...
}

Example eg1 = new Example(1, new int[]{1, 2});
Example eg2 = ...

Ao contrário das cópias rasas e profundas, o clone é um método disponível em todas as classes e matrizes Java. No entanto, é importante observar:
Example eg2 = new Example(eg1.foo, eg1.bar);
A especificação do clone não define se produz um clone raso ou profundo.

não cria necessariamente um novo objeto.
Example eg2 = new Example(eg1.foo, Arrays.copy(eg1.bar));
Embora esses termos sejam usados ​​com frequência em Java, suas definições podem variar amplamente. Compreender as nuances de cópia superficial, cópia profunda e clone é crucial para a duplicação precisa de objetos. Também é importante ter em mente as limitações do clone e abordá -lo com cautela.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3