이 기사에서는 Java Deep Replication 기능 및 사용법에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
이전 :
깊은 복제 란 무엇입니까? Java에서는 객체를 만들 때 일반적으로 객체를 가리키는 참조가 있습니다. 변수를 참조하여 객체의 값 (속성)을 변경하면 참조는 변경되지 않으며 메모리의 메모리, 즉 객체가 가리키는 메모리를 변경합니다. 일반적으로 말하면,이 참조 기준을 다른 참조 변수에 할당하거나 매개 변수로 전달할 때, 우리는 그것을 전달합니다. 즉, 다른 참조 변수에 "복사"에 대한 참조를 가리킨 다음 참조 변수는 동일한 객체를 가리키며 메모리에서 새 개체가 생성되지 않습니다. 경우에 따라, 우리는 객체를 "실제로 복사"하고, 백업이든 기타 작업이든 기준을 "복사"하는 것이 아니라 알려진 객체의 사본을 만들어야합니다.
그래서 어떻게 달성 하는가?
먼저 아이디어에 대해 이야기 해 봅시다. 먼저 객체를 스트림으로 직렬화 한 다음 필자화 한 다음 스트림에서 읽으십시오.
다음 코드 :
패키지 com.yo.java; import java.io.bytearrayinputStream; import java.io.bytearrayoutputstream; import java.io.ioexception; import java.io.objectinputstream; import java.io.objectoutputstream; import java.io.serializable; java.util.list;/** * java는 딥 카피를 구현합니다 * @author yo * */public class deepcopy 구현 직렬화 가능 {int i; / ** * @param args * @throws ioexception * @throws classNotFoundException */ public static void main (String [] args)은 classNotFoundException, ioException {demo1 (); demo2 (); }/** * 딥 카피, 실제 매개 변수 클래스는 직렬화 가능한 인터페이스를 구현해야합니다 * @param o * @return * @throws ioexception * @throws classnotfoundException */public static 객체 DeepCopy (Object O)는 ioException을 던지고 ClassNotfoundException, Serialize First 및 NewtsprestremStremStremStremStremstremsprestremsprespection {// // BytearRayoutputStream (); ObjectOutputStream OO = 새로운 ObjectOutputStream (BO); oo.writeobject (o); // 그런 다음 스트림에서 제외하고 읽습니다. ObjectInputStream oi = 새로운 ObjectInputStream (Bi); return oi.readobject (); } / ** * 참조 통과 및 딥 카피 * @throws classNotFoundException * @throws ioException * / public static void demo1 () throws classNotFoundException, ioException { System.out.println ( "=============================================================================================== ================================================================================================================ ================================================================================================================ ============================================================================================================================================== 1; DC1에서 i의 값을 초기화합니다. dc2 = dc1.i = 2; System.out.println ( "=============================================================================================================================== ===================================================================================================================================== =============================================================================================================== ===================================================================================================================================== (DeepCopy) dc3.i = 2; "dc3 :" + dc3.i)에서 i의 값을 변경합니다. */ public static void demo2 ()는 classNotFoundException, ioException {System.out.println ( "================================================== 시스템에서 시스템. System. Out of System. System. Out of System. System. Out of System. System. Out of System. System. Out of System. System. Out of System. System. Out of System. System. System. Out of System. System. System. Out of System. System. System. Out of System. System. System. Out of System. System. System. Out of System. System. System. Out of System. System. System. Out of System. System. System. System. Out of System. System. System. System. Out of System. System. System. System. Out of System. System. System. System. Out of System. System. System. System. Out of System. System. System. System. System. Out of System. System. System. System. System. System. Out of System. System. System. System. System. System. Out of System. System. System. System. System. System. System. System. Out of System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System. System src) The result is the same //Change the value of the element in list1 for(DeepCopy d1 : list1) { //Change the value of i in dc1 d1.i = 2;} transip list (deepcopy d1 : list1) { "list1 :" + d1.i); System.out.println ( "=============================================================================================== ================================================================================================================================ ================================================================================================================================ ================================================================================================================================ 새로운 DC3.i = 1; DC3 List3 = DeepCopy> (DC3); } for (deepcopy d3 : list3) {system.out.println ( " + d3.i);위의 작업 결과는 다음과 같습니다 (실제로 측정).
================================================================================================================================= ================================================================================================================================= ================================================================================================================================= ========================================================================================================================== : 2List4 (깊은 카피) : 1
객체의 값을 기반으로 패스를 참조하거나 새 값을 작성할 때 "얕은 사본"이라고 불릴 수 있습니다. 원래 객체의 속성이 변경되면 상기 방법에 따라 생성 된 새 개체의 속성도 그에 따라 변경됩니다. 딥 카피가 사용되면 새 개체가 복사되는 것이 사실입니다. 새로운 객체는 원래 객체와 관계가 없습니다. 원래 객체의 속성 변경은 사본의 의미와 마찬가지로 새 개체에 영향을 미치지 않습니다.
위에서 언급했듯이 부적절한 사람이 있다면 지적 할 수 있다면 대단히 감사합니다.
더 많은 Java 관련 컨텐츠를 보려면이 사이트에 관심이있는 독자는 "Java 데이터 구조 및 알고리즘 자습서", "Java Operation Dom Node Tips 요약", "Java 파일 및 디렉토리 작동 팁 요약 및"Java Cache Cache Operation Tips "의 주제를 볼 수 있습니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.