В этой статье описывается функция глубокой репликации Java и использование. Поделитесь этим для вашей ссылки, следующим образом:
Написано ранее:
Что такое глубокая репликация? В Java при создании объекта у нас обычно есть ссылка, указывающая на объект. Когда мы изменяем значение (свойства) объекта, ссылаясь на переменную, ссылка остается неизменной, и он изменяет память в памяти, то есть на объект, на который указывается. Вообще говоря, когда мы назначаем эту ссылку на другую эталонную переменную или передаем ее в виде параметра, мы передаем ее только, то есть мы указываем ссылку на «Копировать» копию на другую эталонную переменную, а затем эталонная переменная также указывает на один и тот же объект, и в памяти нет никакого нового объекта. В некоторых случаях нам нужно «действительно скопировать» объект, создать копию известного объекта, а не только «копировать» ссылку, будь то резервная копия или другие операции.
Итак, как это достичь?
Давайте сначала поговорим об этой идее: сначала сериализуйте объект в поток, затем покинули ее и прочитаем из потока.
Следующий код:
пакет com.yo.java; импорт java.io.bytearrayinputstream; import java.io.bytearrayoutputstream; импорт java.io.ioexception; импорт java.io.objectinputstream; импорт java.io.objectOutputStream; импорт java.io.serializable; импорт. java.util.list;/** * java реализует глубокую копию * @author yo * */public class deepcopy реализует сериализуемые {int i; / ** * @param args * @throws ioexception * @throhs classnotfoundexception */ public static void main (string [] args) выбрасывает classnotfoundexception, ioException {demo1 (); demo2 (); }/** * Глубокая копия, фактический класс параметров должен реализовать сериализуемый интерфейс * @param o * @return * @Throws ioException * @Throws classNotFoundException */public Static DeepCopy (Object O) Throws ioException, classnotFoundException {// // serialize first and write to wreate yeArrayouteAtream weatStream weatStream weatStream weatStream weatStream weatStream; ObjectOutputStream OO = new ObjectOutputStream (bo); OO.WriteObject (O); // затем десериализуйте и читайте из потока, то есть копирование Bytearrayinptstream bi = new Bytearrayinputstream (bo.tobytearray ()); ObjectInputStream oi = new ObjectInputStream (Bi); return oi.readobject (); } / ** * Справочная передача и глубокая копия * @Throws classNotFoundException * @Throws ioException * / public static void demo1 () throws classnotfoundexception, ioException { System.out.println ("================================================================================== ============================================================================================= ============================================================================================= ============================================================================================ 1; // Инициализируйте значение I в DC1 DeepCopy DC2 = DC1; System.out.println ("=================================================================================================== ========================================================================================== ========================================================================================= ========================================================================================== (DeepCopy) DeepCopy (DC3); void demo2 () Throws 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. 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; } // Список транзитов для (DeepCopy D1: List1) {System.out.println ("list1:" + d1.i); System.out.println ("============================================================================ ======================================================================================== ======================================================================================== ======================================================================================== New DeepCopy (); D3: List3) {System.out.println ("List3:" + D3.i);Приведенные выше результаты работы следующие (фактически измерены):
========================================================================================================================= ========================================================================================================================= ==================================================================================================================== ======================================================================================================== : 2List4 (глубокая копия): 1
Можно видеть, что, если только ссылаться на проход или создание нового значения, основанного на значении объекта, его можно назвать только «мелкой копией». Когда свойства исходного изменения объекта изменение объекта, свойства нового объекта, созданный в соответствии с вышеупомянутым методом, также изменятся соответствующим образом; И если используется глубокая копия, это правда, что новый объект копируется. Новый объект не имеет отношения с исходным объектом. Изменение свойств исходного объекта не повлияет на новый объект, как значение копии.
Как упомянуто выше, если есть какая -то неуместность, если вы можете указать это, большое спасибо
Для получения дополнительного контента, связанного с Java, читатели, заинтересованные в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Operation Dom Узел», «Краткое изложение Java File и Directory Commine» и «Советы по эксплуатации Java Cache»
Я надеюсь, что эта статья будет полезна для всех Java Programming.