Dieser Artikel beschreibt die Funktion und Verwendung von Java Deep Replication. Teilen Sie es für Ihre Referenz wie folgt weiter:
Vorher geschrieben:
Was ist eine tiefe Replikation? Bei Java haben wir beim Erstellen eines Objekts normalerweise eine Referenz, die auf das Objekt zeigt. Wenn wir den Wert (Eigenschaften) des Objekts durch Verweisen auf die Variable ändern, bleibt die Referenz unverändert und ändert den Speicher im Speicher, dh das Objekt, auf das hingewiesen wird. Wenn wir diese Referenzvariable zuweisen oder sie als Parameter übergeben, übergeben wir im Allgemeinen nur die Referenz auf "Kopieren" einer Kopie in eine andere Referenzvariable, und dann zeigt die Referenzvariable auch auf dasselbe Objekt, und es wird kein neues Objekt im Speicher erstellt. In einigen Fällen müssen wir das Objekt "wirklich kopieren", eine Kopie des bekannten Objekts erstellen, nicht nur die Referenz "kopieren", unabhängig davon, ob es sich um eine Sicherung oder andere Operationen handelt.
Wie kann man es also erreichen?
Lassen Sie uns zuerst über die Idee sprechen: Serialisieren Sie das Objekt zuerst in den Stream, deserialisieren Sie es und lesen Sie es aus dem Stream aus.
Der folgende Code:
Paket com.yo.java; import Java.io.BytearrayInputStream; Import Java.io.BytearrayoutputStream; Import Java.io.ioException; Import Java.io.ObjectinputStream; Import Java.io. java.util.list;/** * Java implementiert Deep Copy * @author yo * */public class DeepCopy implementiert serialisierbar {int i; / ** * @param args * @throws ioException * @throws classNotFoundException */ public static void main (String [] args) löst ClassNotFoundException, ioException {Demo1 () aus; Demo2 (); }/** * Deep Copy, die tatsächliche Parameterklasse muss die serialisierbare Schnittstelle implementieren * @param o * @return * @throws ioException * @throws classnotFoundException */public static Object DeepCopy (Objekt O) löscht IOException, classnotfoundException {// // Serialize zuerst und schreiben Sie zu. ObjectOutputStream oo = new ObjectOutputStream (BO); oo.writeObject (o); // Dann Deserialize und Lesen Sie aus dem Stream, dh, bytearrayinputStream bi = new bytearrayInputStream (bo.tobytearray ()); ObjectInputStream oi = new ObjectInputStream (bi); return oi.ReadObject (); } / ** * Referenzabgabe und Deep Copy * @throws classNotFoundException * @throws ioException * / public static void Demo1 () löst ClassNotFoundException, IOException {aus System.out.println("========================================================================================== =================================================================ieben =================================================================ieben =================================================================ieben 1; // Initialisieren Sie den Wert von I in DC1 DeepCopy DC2 = DC1; System.out.println("===================================================================================== ==================================================================ieben ==========================================================ieben ==================================================================ieben (DeepCopy) DeepCopy (DC3); void demo2() throws ClassNotFoundException, IOException { System.out.println("================================================================= 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. 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; } // transiplist für (DeepCopy D1: List1) {System.out.println ("List1:" + d1.i); System.out.println("======================================================================== ==================================================================================ieben ==================================================================================ieben ==================================================================================ieben newCopy (); d3: list3) {System.out.println ("list3:" + d3.i);Die obigen Betriebsergebnisse sind wie folgt (tatsächlich gemessen):
=====================================================ieben =====================================================ieben =====================================================ieben =====================================================ieben : 2List4 (Deep Copy): 1
Es ist ersichtlich, dass es nur als "flache Kopie" bezeichnet werden kann, wenn er sich nur auf Pass oder einen neuen Wert erstellt, der auf der Grundlage des Objekts basiert. Wenn sich die Eigenschaften des ursprünglichen Objekts ändern, ändern sich die Eigenschaften des gemäß der obigen Methode erstellten neuen Objekts ebenfalls entsprechend. Und wenn Deep Copy verwendet wird, ist es wahr, dass ein neues Objekt kopiert wird. Das neue Objekt hat keine Beziehung zum ursprünglichen Objekt. Die Änderung der Eigenschaften des ursprünglichen Objekts wirkt sich nicht wie die Bedeutung der Kopie auf das neue Objekt aus.
Wie oben erwähnt, vielen Dank, wenn Sie Unangemessenheit gibt, vielen Dank, wenn Sie darauf hinweisen können
Für mehr Java-bezogene Inhalte können Leser, die an dieser Website interessiert sind, die Themen anzeigen: "Java-Datenstruktur und Algorithmus-Tutorial", "Zusammenfassung der Java-Operation DOM-Knoten-Tipps", "Zusammenfassung der Java-Datei- und Verzeichnisoperationstipps" und "Zusammenfassung von Java Cache Operation Tipps" "
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.