這節我們來說陣列中四種拷貝方式
1.for迴圈拷貝
2.clone拷貝
3.system.arraycopy拷貝
4.arrays.copyof拷貝
這裡我們先建立個淺拷貝的概念:簡單來說就是拷貝後兩個變數指向同一片位址。
陣列屬於引用型別,自身攜帶的是儲存值得位址。
接下來讓我們從基本型別的陣列和引用型別的陣列來分別講述
陣列屬於引用型別
1.for迴圈
這是輸出的結果
這裡定義通過for迴圈把array拷貝給array2,然後變化array中1號位置的值發現array2
對應位置的值沒有變,說明兩者指向的不是同一塊位址。
我們看一下他在內部是怎麼拷貝的
可以看出兩者對應的位址並不是同一塊,所以修改array2陣列的值,並不影響array中
的值。然後我們換用引用型別的陣列來試試
這裡我們定義乙個類,用來定義引用型別的陣列
這裡我們也通過for迴圈拷貝,show2是引用型別的列印方法,先是拷貝後的列印,然
後是t2中第乙個元素後的列印,讓我們來看一下結果
發現結果t1陣列中的第乙個元素也發生了變化,也變成了1000,說明這兩者指向同一
片位址。所以for迴圈的引用型別的拷貝屬於淺拷貝。
2.clone拷貝
列印結果如下
array的一號位置的值發生改變而array2一號位置卻未變,說明clone的陣列拷貝後兩
者對應的不是同一塊位址。再看引用類陣列
列印結果
看出改變array一號位置的位址,array2一號位置也一樣改變,說明兩者指向的是同一
塊位址,所以clone的引用類
型的陣列也是淺拷貝。
再用圖示來說明引用陣列中他們是
如何拷貝的
因為這裡是引用陣列,陣列中存放的是引用物件的位址,所以array2拷貝array時,獲
得的是array所引用物件的位址,兩者對應同一塊位址,當任意陣列中位址中的值改變
時,兩個陣列對應的值都發生改變。
3.system.arraycopy拷貝
我們先了解一下system.arraycopy是怎麼使用的,system.arraycopy(object
src,int srcpos, object dest,int destpos)
src : 源陣列
srcpos:源陣列的開始位置 0 開始拷貝的位置
dest:拷貝到目標陣列
destpos:拷貝到目標陣列的位置
列印結果
看出改變array一號位置的位址,array2一號位置沒有改變,說明兩者指向的是不是同
一塊位址,再來看引用類型別
列印結果
看出改變array一號位置的位址,array2一號位置也一樣改變,說明兩者指向的是同一
塊位址,所以system.arraycopy對引用型別的陣列也是淺拷貝。
4.arrays.copyof拷貝
首先讓我們先了解一下它的用法
arrays.copyof(original, newlength);
original:原始陣列
newlength:新的陣列長度
列印結果
看出改變array一號位置的位址,array2一號位置不發生改變,說明兩者指向的是不同
位址。繼續看引用類陣列
列印結果
看出改變array一號位置的位址,array2一號位置也一樣改變,說明兩者指向的是同一
塊位址,所以arrays.copyof對於引用型別的陣列也是淺拷貝。
四種陣列拷貝方法及基本就是這樣。
陣列,但是在引用類陣列中,都是淺拷貝,拷貝後的陣列和源陣列指向同一片位址。
(新手上路,如有錯誤請多多指教,謝謝。)
二維陣列中的四種拷貝
如同一維陣列一樣,二維陣列中也有四種拷貝方式,且與一維陣列中的拷貝方式一樣 分別為 1.for迴圈拷貝 2.clone 3.system.arraycopy 4.arrays.copyof 四種用法在上節都已經講過,那讓我們看看在二維陣列中與在一維陣列中會有什麼不 同。1.for迴圈拷貝 輸出結果 ...
陣列拷貝的四種方式
第一種方式也是最常見的方式 for迴圈 public class test int newarr copyof arr system.out.println arrays.tostring newarr public static int copyof int arr return arr2 返回乙...
Python二維陣列轉為一維陣列的四種方法
已知a 4,0,1 9,2,7 8,12,90 列表推導式 i for j in a for i in j itertoolsfrom itertools import chain list chain.from iterable a sum小技巧sum a,operatorimport opera...