javabean淺複製的問題

2021-08-21 19:19:05 字數 1288 閱讀 6279

淺複製的時候,如果本裡面包含了物件這個就會出現問題,bean裡面的對bean的引用是位址的引用而非真正實體的引用,

list

list = new arraylist<>();

list.add(new student("小哥","女人", "lalalalaalala"));

student student = new student("大哥","女人", "null");

person person = new person("11","老師","女",student,list);

person person1 = new person();

beanutils.copyproperties(person,person1);

student.setfactior("地球人");

list.get(0).setgirlfriends("我愛你中國,你會在**啊啊,在**啊");

system.out.println(person);

system.out.println(person1);

結果如下所示:

person, list=[student]}

person, list=null}

如果你對引用物件的修改,會導致原來bean裡面的bean的屬性也會被修改的(物件對物件的引用是由物件之家的的位址檢進行連線的,正如上面所寫物件屬性的修改導致整個物件屬性之間的修改),對於list集合潛伏著不會將其複製過去,物件之間的clone也屬於淺複製的一項。

要實現真正的深複製,我個建議使用二進位製流來進行檔案流來進行,這樣就會將位址重新複製*(將該物件序列化成流,因為寫在流裡的是物件的乙個拷貝,而原物件仍然存在於jvm裡面。所以利用這個特性可以實現物件的深拷貝)

先將其序列化進行二進位制的讀取

bytearrayoutputstream bo = new bytearrayoutputstream();

objectoutputstream oo = new objectoutputstream(bo);

oo.writeobject(o);

然後反序列化,從流裡讀取出來,即完成複製

bytearrayinputstream bi = new bytearrayinputstream(bo.tobytearray());

objectinputstream oi = new objectinputstream(bi);

outer = (outer) ois.readobject();

JAVA ArrayList的淺複製問題

arraylist的add方法的原始碼,可以看到僅僅是把物件用 號複製了一下,但是更改如果更改外邊的e的話,arraylist裡的物件就會隨之改變 public boolean add e e 測試 public class sayhello public static class test imp...

OC深淺複製問題

呢。這裡為了便於朋友們理解,定義如下。淺 復 制 在複製操作時,對於被複製的物件的每一層複製都是指標複製。深 復 制 在複製操作時,對於被複製的物件至少有一層複製是物件複製。完全複製 在複製操作時,對於被複製的物件的每一層複製都是物件複製。注 1 在複製操作時,對於物件有n層是物件複製,我們可稱作n...

淺複製 深複製

second,來說說shallow copy and deep copy的定義和我自己的一些理解。僅供參考 淺複製 shallow copy 如果欄位是值型別的。則對該字段執行逐位複製,如果欄位是引用型別,則複製引用但不複製引用的物件 因此,原始物件及其副本引用同一物件。即被複製物件的所有變數都含有...