淺拷貝和深拷貝

2021-10-19 07:18:53 字數 745 閱讀 3114

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

對於物件引用:源物件改變,複製出的物件也會跟著變化。

基本型別:相互不影響,複製的是值

string型別:複製的是位址,但是修改的時候,會新生成乙個物件。所以,也不會產生影響。

# 實現cloneable介面,& 提公升cloneable介面種clone方法的作用域

public object clone()

throws clonenotsupportedexception

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

1.每層物件都需要實現cloneable

2.上層需要顯示呼叫下層的clone方法,並賦值給屬性

先寫再讀

public

class

cloneutils

catch

(exception e)

return result;

}}

org.apache.commons.beanutils.beanutils#clonebean

beanutils.clonebean(object bean)

beancopier.create(xx.class,xx.class, true)

深拷貝和淺拷貝

淺拷貝就是物件的資料成員之間的簡單賦值,如你設計了乙個沒有類而沒有提供它的複製建構函式,當用該類的乙個物件去給令乙個物件賦值時所執行的過程就是淺拷貝,如 class a a private int data int main 這一句b a 就是淺拷貝,執行完這句後b.data 5 如果物件中沒有其他...

淺拷貝和深拷貝

以下情況都會呼叫拷貝建構函式 乙個物件以值傳遞的方式傳入函式體 例如 已知class a,class b void func a a void func a a func b b 此時函式對b的操作是呼叫拷貝建構函式後的臨時拷貝物件。多數傳指標 乙個物件以值傳遞的方式從函式返回 如 return b...

深拷貝和淺拷貝

ios提供了copy和mutablecopy方法,顧名思義,copy就是複製了乙個imutable的物件,而mutablecopy就是複製了乙個mutable的物件。以下將舉幾個例子來說明。1 系統的非容器類物件 這裡指的是nsstring nsnumber等等一類的物件。nsstring stri...