Artikel ini menjelaskan fungsi dan penggunaan replikasi Java Deep. Bagikan untuk referensi Anda, sebagai berikut:
Ditulis sebelumnya:
Apa itu replikasi yang dalam? Di Java, saat membuat objek, kami biasanya memiliki referensi yang menunjuk ke objek. Ketika kita mengubah nilai (properti) dari objek dengan merujuk pada variabel, referensi tetap tidak berubah, dan itu mengubah memori dalam memori, yaitu, objek menunjuk ke. Secara umum, ketika kami menetapkan referensi ini ke variabel referensi lain atau meneruskannya sebagai parameter, kami hanya melewatkannya, yaitu, kami menunjukkan referensi untuk "menyalin" salinan ke variabel referensi lain, dan kemudian variabel referensi juga menunjuk ke objek yang sama, dan tidak ada objek baru yang dibuat dalam memori. Dalam beberapa kasus, kita perlu "benar -benar menyalin" objek, membuat salinan objek yang diketahui, bukan hanya "menyalin" referensi, apakah itu cadangan atau operasi lainnya.
Jadi, bagaimana cara mencapainya?
Mari kita bicara tentang ide terlebih dahulu: pertama -tama membuat serial objek ke dalam aliran, kemudian deserialize, dan membacanya dari aliran.
Kode berikut:
Paket com.yo.java; impor java.io.bytearrayInputStream; import java.io.bytearrayoutputstream; import java.io.ioexception; import java.io.objectInputStream; import java.ObjectOutputStream; impor java.io.serizable; java.util.list;/** * java mengimplementasikan salinan dalam * @author yo * */kelas publik DeepCopy mengimplementasikan serializable {int i; / ** * @param args * @throws ioException * @throws ClassNotFoundException */ public static void main (string [] args) melempar classnotfoundException, ioException {demo1 (); demo2 (); } /** * Deep copy, the actual parameter class must implement the Serializable interface* @param o * @return * @throws IOException * @throws ClassNotFoundException */ public static Object deepCopy(Object o) throws IOException, ClassNotFoundException {// //Serialize first and write to the stream ByteArrayOutputStream bo = new BytearrayoutputStream (); ObjectOutputStream OO = ObjectOutputStream baru (BO); oo.writeObject (o); // Kemudian deserialize dan baca dari aliran, yaitu, menyalin bytearrayInputStream bi = bytearrayInputStream baru (bo.tobyteArray ()); ObjectInputStream oi = ObjectInputStream baru (BI); return oi.readObject (); } / ** * Referensi Passing dan Salin Dalam * @Throws ClassNotFoundException * @throws IoException * / public static void demo1 () melempar ClassNotFoundException, IoException { System.out.println ("================================================================================================================ ============================================================================================================================================================= ============================================================================================================================================================= ============================================================================================================================================================== 1; // Inisialisasi nilai i dalam dc1 deepcopy dc2 = dc1; System.out.println ("========================================================================================================================================================================================= ====================================================================================================================================================================== ======================================================================================================================================================= ====================================================================================================================================================================== (Deepcopy) Deepcopy (DC3); static void demo2 () melempar ClassNotFoundException, ioException {System.out.println ("================================================================================================================== 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; } // Daftar TransIP untuk (Deepcopy D1: List1) {System.out.println ("List1:" + D1.i); System.out.println ("================================================================================================ ===================================================================================================================================================== ===================================================================================================================================================== ===================================================================================================================================================== Deepcopy (); d3: list3) {System.out.println ("List3:" + d3.i);Hasil operasi di atas adalah sebagai berikut (sebenarnya diukur):
=============================================================================================================================================== =============================================================================================================================================== =============================================================================================================================================== ============================================================================================================================================= : 2list4 (salinan dalam): 1
Dapat dilihat bahwa ketika hanya merujuk pada lulus atau menciptakan nilai baru berdasarkan nilai objek, itu hanya dapat disebut "salinan dangkal". Ketika properti dari perubahan objek asli, properti objek baru yang dibuat sesuai dengan metode di atas juga akan berubah sesuai; Dan jika salinan dalam digunakan, memang benar bahwa objek baru disalin. Objek baru tidak memiliki hubungan dengan objek asli. Perubahan properti dari objek asli tidak akan mempengaruhi objek baru, seperti makna salinan.
Seperti disebutkan di atas, jika ada ketidaksesuaian, jika Anda bisa menunjukkannya, terima kasih banyak
Untuk konten yang lebih terkait dengan Java, pembaca yang tertarik dengan situs ini dapat melihat topik: "Tutorial Struktur Data Java dan Algoritma", "Ringkasan Java Operation Dom Node Tips", "Ringkasan Tips Operasi Java File dan Direktori" dan "Ringkasan Java Cache Tips"
Saya harap artikel ini akan membantu pemrograman Java semua orang.