얕은 복사와 깊은 복사의 차이점: 얕은 복사: 동일한 데이터를 참조하는 개체를 만들고 복사본을 변경하면 원본 개체에도 영향을 미칩니다. 전체 복사: 원본 개체 데이터의 복사본을 포함하는 개체를 만듭니다. 복사본을 변경해도 원본 개체에는 영향을 주지 않습니다.
Java의 얕은 복사와 전체 복사
소개
Java에서 얕은 복사와 전체 복사의 개념을 이해하는 것은 객체 작업에 매우 중요합니다. 이 튜토리얼에서는 둘 사이의 차이점을 자세히 설명하고 코드 예제를 통해 설명합니다.
Shallow copy
코드 예:
class Person { private String name; private Address address; } public class ShallowCopyDemo { public static void main(String[] args) { Person p1 = new Person(); p1.setName("John Doe"); Address addr = new Address(); addr.setStreet("123 Main St."); p1.setAddress(addr); // Shallow copy Person p2 = p1; // 更改 p2 的地址 p2.getAddress().setStreet("456 Elm St."); // p1 的地址也发生了变化 System.out.println(p1.getAddress().getStreet()); // 输出:456 Elm St. } }
이 예에서 p2
는 p1
의 얕은 복사본이며 동일한 Address
개체를 참조합니다. . 따라서 p2
주소를 변경하면 p1
에도 영향을 미칩니다. p2
是 p1
的浅拷贝,它们引用相同的 Address
对象。因此,对 p2
的地址进行更改也会影响 p1
。
深拷贝
代码示例:
使用 clone()
方法或第三方库(如 Apache Commons Lang)来实现深拷贝。
使用 clone() 方法:
class Person implements Cloneable { private String name; private Address address; @Override public Person clone() { try { // 使用 super.clone() 创建新对象 return (Person) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } } public class DeepCopyDemo { public static void main(String[] args) { Person p1 = new Person(); p1.setName("John Doe"); Address addr = new Address(); addr.setStreet("123 Main St."); p1.setAddress(addr); // Deep copy Person p2 = p1.clone(); // 更改 p2 的地址 p2.getAddress().setStreet("456 Elm St."); // p1 的地址保持不变 System.out.println(p1.getAddress().getStreet()); // 输出:123 Main St. } }
在此示例中,clone()
方法为 p1
创建了一个深拷贝。更改 p2
的地址不会影响 p1
,因为它们引用不同的 Address
Deep copy
코드 예:
🎜🎜clone()
메서드 또는 타사 라이브러리(예: Apache Commons Lang)를 사용하여 전체 복사를 구현합니다. 🎜🎜🎜clone() 메서드 사용: 🎜🎜rrreee🎜이 예에서 clone()
메서드는 p1
의 전체 복사본을 만듭니다. p2
의 주소를 변경해도 p1
은 다른 Address
개체를 참조하므로 영향을 받지 않습니다. 🎜🎜🎜깊은 복사와 얕은 복사는 언제 사용하나요? 🎜🎜🎜🎜🎜얕은 복사: 🎜객체의 복사본을 수정하는데 부작용이 없을 때 얕은 복사를 할 수 있습니다. 🎜🎜🎜Deep Copy: 🎜원본 개체에 영향을 줄 수 있는 개체의 복사본을 수정할 때 Deep Copy가 필요합니다. 🎜🎜🎜예를 들어, 객체를 캐싱하거나 신뢰할 수 없는 코드에 전달할 때는 항상 전체 복사본을 사용하세요. 🎜위 내용은 Java에서 얕은 복사와 깊은 복사의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!