java中的clone 方法詳解

2021-09-25 04:03:27 字數 1369 閱讀 3842

@test

public void testassign()}

@test

public void testshallowcopy() throws exception

如果是基本資料型別的成員變數,我們轉殖之後彼此的屬性是可以相互不影響的,接著看:

如果增加乙個自定義的類物件時

@data

public class address

測試

@test

public void testshallowcopy() throws exception

輸出結果:

false

p1=person(name=peter, age=31, address=address(type=office, value=北京))

p2=person(name=peter, age=31, address=address(type=office, value=北京))

這是我們可以發現當我對p2物件進行操作的時候,p1物件中address的值也發生了改變,這就是淺拷貝。其實p1物件中address屬性還是引用了p2中的位址。所以p2一改p1也跟著改變了。

前面例項中是淺拷貝和深拷貝的典型用例。

淺拷貝:被複製物件的所有值屬性都含有與原來物件的相同,而所有的物件引用屬性仍然指向原來的物件。

深拷貝:在淺拷貝的基礎上,所有引用其他物件的變數也進行了clone,並指向被複製過的新物件。

也就是說,乙個預設的clone()方法實現機制,仍然是賦值。

如果乙個被複製的屬性都是基本型別,那麼只需要實現當前類的cloneable機制就可以了,此為淺拷貝。

如果被複製物件的屬性包含其他實體類物件引用,那麼這些實體類物件都需要實現cloneable介面並覆蓋clone()方法。

@data

public class address implements cloneable

}這樣還不夠,person的clone()需要顯式地clone其引用成員。

@data

public class person implements cloneable

}

重新跑前面的測試用例:

false

p1=person(name=peter, age=31, address=address(type=home, value=北京))

p2=person(name=peter, age=31, address=address(type=office, value=北京)

現在轉殖後的物件的屬性就也不會跟著改變了

Java中的clone方法

1.功能 由方法名 轉殖 可知是複製乙個物件,方法呼叫後會建立並返回此物件的乙個副本。2.為什麼不用 以賦值的方式建立物件副本?student stu1 new student zhaoliu 18,1996 11 20 student stu2 stu1 stu2.setname lisi sys...

Java中的clone和深度clone

複製物件 or 複製引用 person p new person 23,zhang person p1 p system.out.println p system.out.println p1 當person p1 p 執行之後,是建立了乙個新的物件嗎?首先看列印結果 person p new pe...

java 中的clone 在陣列中

今天在程式設計中遇到發現乙個問題,那就是二維陣列的clone,只有第一層clone了,裡層的還是指向之前的位址 string a string aa a.clone aa 0 22 system.out.println a 0 列印 1 string e string ee e.clone ee 0...