如果我們想拷貝一個數組,我們可能會使用System.arraycopy()或者Arrays.copyof()兩種方式。在這里,我們將使用一個比較簡單的示例來闡述兩者之間的區別。
首先先說System.arraycopy()
接下來是代碼
int[] arr = {1,2,3,4,5};
int[] copied=new int[10];
System.arraycopy(arr,0,copied,1,5);//這里的arr是原數組,0是原數組拷貝的其實地址。而copied是目標數組,1是目標數組開始存放的位置,5則是數組存放的長度。
System.out.println(Array.toString(copied));
運行結果如下:
[0,1,2,3,4,5,0,0,0,0];
再來說arrays.copyof()
int copied=arrays.copyof(arr,10);
System.out.println(Arrays.toString(copied));
copied=arrays.copyof(arr,3);
System.out.println(Arrays.toString(copied));
運行結果如下:
[1,2,3,4,5,0,0,0,0,0]
[1,2,3]
這里我們來談談他們的區別,這也是之前我一直沒弄懂的地方:
兩者的區別在於,Arrays.copyOf()不僅僅只是拷貝數組中的元素,在拷貝元素時,會創建一個新的數組對象。而System.arrayCopy只拷貝已經存在數組元素。
如果我們看過Arrays.copyOf()的源碼就會知道,該方法的底層還是調用了System.arrayCopyOf()方法。
而且System.arrayCopy如果改變目標數組的值原數組的值也會隨之改變。
