1. 程式人生 > >對java的淺拷貝和深拷貝的理解

對java的淺拷貝和深拷貝的理解

參考網址:http://www.cnblogs.com/chenssy/p/3308489.html 、https://blog.csdn.net/chenssy/article/details/12952063

淺拷貝:使用一個已知例項對新建立例項的成員變數逐個賦值,這個方式被稱為淺拷貝。

深拷貝:當一個類的拷貝構造方法,不僅要複製物件的所有非引用成員變數值,還要為引用型別的成員變數建立新的例項,並且初始化為形式引數例項值。這個方式稱為深拷貝

對於淺拷貝,當物件的成員變數是基本資料型別時,兩個物件的成員變數已有儲存空間,賦值運算傳遞值,所以淺拷貝能夠複製例項。但是當物件的成員變數是引用資料型別時,就不能實現物件的複製,只能傳遞引用。

深拷貝對物件內部的引用均複製,它是建立一個新的例項,並且複製例項。

Object類的clone()方法只能實現淺拷貝,基本規則如下:

1、 基本型別

如果變數是基本資料型別,則拷貝其值,比如int、float等。

2、 物件

如果變數是一個例項物件,則拷貝其地址引用,也就是說此時新物件與原來物件是公用該例項變數。

3、 String字串

若變數為String字串,則拷貝其地址引用。但是在修改時,它會從字串池中重新生成一個新的字串,原有字串物件保持不變。