陣列拷貝(深拷貝 淺拷貝)

2021-09-12 03:57:04 字數 1055 閱讀 8901

底層都是使用system.arraycopy(object src, int srcpos, object dest, int destpos, int length)方法完成陣列元素拷貝任務的

方法說明:

- 如果newlength < original.length,那麼會將原陣列中前newlength個元素拷貝到新陣列中

- 如果newlength > original.length,那麼新陣列中沒有被賦值的元素將會被設定為預設值(0、false或null)

int copyof(int original, int newlength)

long copyof(long original, int newlength)

float copyof(float original, int newlength)

double copyof(double original, int newlength)

方法簽名

public staticnativevoid arraycopy(object src, int srcpos, object dest, int destpos, int length)

說明:該方法是native方法

兩者都是用來拷貝陣列,arrays.copyof在底層呼叫的是system.arraycopy()方法

如果拷貝的是基本型別元素,那麼兩者都是進行深拷貝(拷貝數值)

如果拷貝的是引用型別元素,那麼兩個都是進行淺拷貝(dest陣列中的每個元素儲存的是源陣列元素所指向的物件的引用)

區別:使用arrays.copyof拷貝元素,得到的是乙個新陣列物件

使用system.arraycopy()拷貝元素,不會建立新陣列,在底層是對記憶體塊的直接複製

淺拷貝 深拷貝

copy mutablecopy copy 不管是可變的,還是不可變的,結果都是不可變的 mutablecopy 不管是不可變的,還是可變的,結果都是可變的 nsmutablestring str nsmutablestring stringwithformat a nsarray arr1 str...

深拷貝 淺拷貝

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝 深拷貝

retain是建立乙個指標,引用物件計數加1。copy屬性表示兩個物件內容相同,新的物件retain為1 與舊有物件的引用計數無關,舊有物件沒有變化。copy減少物件對上下文的依賴。retain屬性表示兩個物件位址相同 建立乙個指標,指標拷貝 內容當然相同,這個物件的retain值 1也就是說,re...