>  기사  >  Java  >  딥 카피, 얕은 카피, 클론: 어떤 Java 복사 메커니즘을 사용해야 합니까?

딥 카피, 얕은 카피, 클론: 어떤 Java 복사 메커니즘을 사용해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-30 06:44:28234검색

 Deep Copy vs. Shallow Copy vs. Clone: Which Java Copy Mechanism Should You Use?

Java의 전체 복사, 얕은 복사 및 복제

Java에서 객체를 조작할 때는 복사 의미의 미묘한 차이를 이해하는 것이 중요합니다. 전체 복사, 얕은 복사 및 복제는 객체 복제에 대한 다양한 접근 방식을 설명하는 데 일반적으로 사용되는 용어입니다.

얕은 복사

얕은 복사는 객체의 가장 바깥쪽 수준을 복제합니다. . 새 개체에는 별도의 필드가 있지만 해당 필드 내에 포함된 모든 참조는 원본 개체와 공유됩니다.

예:

<code class="java">Example eg1 = new Example(1, new int[]{1, 2});
Example eg2 = new Example(eg1.foo, eg1.bar);</code>

이 얕은 복사본에서는 eg2 새로운 foo가 있고 eg1과 동일한 bar 배열에 대한 참조가 있습니다.

Deep Copy

Deep Copy는 객체의 여러 수준을 탐색하여 중첩된 모든 객체의 새 복사본을 생성합니다. 사물. 새 객체는 원본과 완전히 독립적입니다.

예:

<code class="java">Example eg1 = new Example(1, new int[]{1, 2});
Example eg2 = new Example(eg1.foo, Arrays.copy(eg1.bar));</code>

이 딥 카피에서 eg2에는 새로운 foo와 새로운 배열 막대가 있습니다. eg1에 있는 것의 복사본입니다.

Clone

모든 객체와 배열에 대해 존재하는 clone 메소드는 복사본을 생성하기 위한 것입니다. 그러나 해당 동작은 표준화되지 않았습니다.

  • 얕은 복사본이나 깊은 복사본을 반환할 수 있습니다.
  • 항상 새 개체를 생성하는 것은 아닙니다.
  • 그렇지 않을 수도 있습니다. 객체 동등성을 보장합니다.

결론

객체 간의 완전한 독립이 필요한 경우 심층 복사를 권장합니다. 얕은 복사는 객체 참조가 충분할 때 적합합니다. 복제 방법의 동작은 일관되지 않으므로 주의해서 사용해야 합니다.

위 내용은 딥 카피, 얕은 카피, 클론: 어떤 Java 복사 메커니즘을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.