1. 程式人生 > >Arrays.copyof(···)與System.arraycopy(···)陣列元素複製區別

Arrays.copyof(···)與System.arraycopy(···)陣列元素複製區別

他們的區別就是 System.arraycopy不關心你是什麼資料型別,只是完成資料元素複製。Arrays.copyof方法是根據不同型別呼叫System.arraycopy方法完成複製內容。
System.arraycopy方法是一個本地方法的位元組複製函式;完成將src陣列指向的記憶體一部分複製到dest陣列指向的記憶體。
src 是原陣列,srcPos指定開始複製的下標
dest是複製的目的陣列,destPos表示目的陣列開始接受複製內容的下標
length表示這次複製的陣列元素個數

public static native void arraycopy(Object src,  int
srcPos, Object dest, int destPos, int length);

再來看看Arrays.copyOf();該方法對於不同的資料型別都有相應的方法過載。
這個位元組陣列複製時先定義了一個新位元組陣列,newLength長度。
然後呼叫System.arraycopy本地方法完成複製功能。
其他基本資料型別的複製都是一樣的模式。

 public static byte[] copyOf(byte
[] original, int newLength) { byte[] copy = new byte[newLength]; System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }

關於這個泛型的複製內容,關鍵是根據複製的original尋找到資料型別,構建一個newLength長的陣列。

 public static <T,U> T[] copyOf(U[] original, int newLength, Class
<? extends T[]> newType) {
@SuppressWarnings("unchecked") T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength); System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }