1、Arrays.copyof是什么?
Arrays.copyof是用於數組進行復制時常使用的方法,本身在Arrays類里面,而之所以能這么使用而不用創建對象在於該方法本身由static修飾,被static修飾的方法可以在該類創建對象前載入jvm
2、方法解析
下圖包含了copyof眾多的重載方法
以最典型的Arrays.copyOf(srcArray, length);
為例進行分析
其實質是調用了System.arraycopy方法
public static long[] copyOf(long[] original, int newLength) {
long[] copy = new long[newLength];
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
由此可以看到實現有三布:
1、先產生一個新的數組
2、調用arraycopy方法
3、返回產生的新數組
3、思考
當我們將原來的數組進行擴容的時候,調用該方法產生了一個新的數組,而將擴容后的數組賦值給原來的數組的時候,原數組指向新產生的數組,但其原數組的內容依然在內存中,等待jvm回收,在這段時間中其實是造成了內存的浪費
所以使用該方法盡管簡便,實際上有一定的不足。
4、System.arraycopy的實現
private static void arraycopy(long[] original, int i, long[] copy,int j, int min) {
for (; i< min; i++) {
if (i<original.length) {
copy[j++] = original[i];
}else {
copy[j++]=0;
}
}
}
}