>Java >java지도 시간 >new 키워드 대신 Java에서 clone() 메소드를 사용하는 방법은 무엇입니까?

new 키워드 대신 Java에서 clone() 메소드를 사용하는 방법은 무엇입니까?

WBOY
WBOY앞으로
2023-04-22 19:55:061451검색

new 대신 clone()을 사용하세요

Java에서 새 개체 인스턴스를 만드는 가장 일반적인 방법은 new 키워드를 사용하는 것입니다. new에 대한 JDK의 지원은 매우 훌륭합니다. new 키워드를 사용하여 경량 객체를 생성하면 매우 빠릅니다. 그러나 중량이 큰 개체의 경우 개체가 생성자에서 일부 복잡하고 시간이 많이 소요되는 작업을 수행할 수 있으므로 생성자의 실행 시간이 더 길어질 수 있습니다. 결과적으로 시스템은 단기간에 많은 수의 인스턴스를 확보할 수 없습니다. 이 문제를 해결하려면 Object.clone() 메서드를 사용할 수 있습니다.

Object.clone() 메서드는 생성자를 우회하고 객체 인스턴스를 빠르게 복사할 수 있습니다. 그러나 기본적으로 clone() 메서드에 의해 생성된 인스턴스는 원본 객체의 단순 복사본일 뿐입니다.

여기서 Java는 값으로만 ​​전송된다는 점을 언급해야 합니다. 이 점에 관해 제가 이해한 바는 기본 데이터 유형이 값을 참조하고 일반 객체도 값을 참조한다는 것입니다. 그러나 이 일반 객체가 참조하는 값은 실제로 주소입니다. 객체의. 코드 예:

int i = 0; int j = i; //i的值是0  User user1 = new User();  User user2 = user1; //user1值是new User()的内存地址

전체 복사가 필요한 경우 clone() 메서드를 다시 구현해야 합니다. ArrayList가 구현한 clone() 메서드를 살펴보겠습니다.

public Object clone() {                try {             ArrayList<?> v = (ArrayList<?>) super.clone();             v.elementData = Arrays.copyOf(elementData, size);             v.modCount = 0;                         return v;         } catch (CloneNotSupportedException e) {                         // this shouldn't happen, since we are Cloneable             throw new InternalError(e);         }     }

ArrayList의 clone() 메서드에서 먼저 super.clone() 메서드를 사용하여 얕은 복사본 객체를 생성합니다. 그런 다음 참조할 새 ArrayList에 대한 새 elementData 배열을 복사합니다. 복제된 ArrayList 객체가 원본 객체와 다른 참조를 유지하도록 만들어 전체 복사를 실현합니다.

위 내용은 new 키워드 대신 Java에서 clone() 메소드를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제