JavaにおけるSystem.arraycopy()とArrays.copyOf()の違い
1278 ワード
まずSystem.arraycopy()の声明を見てみましょう.
src-ソース配列.SrcPos-ソース配列の開始位置.dest-ターゲット配列.destPos-ターゲットデータの開始位置.length-コピーする配列要素の数.
この方法はnativeキーワードを用いて,呼び出しが他の言語で書かれた下位関数であることを示した.
Arrays.copyOf()を見てみましょう
このメソッドは、異なるデータ型に対応するそれぞれのリロードメソッドoriginal-コピーする配列newLength-返すレプリカの長さnewType-返すレプリカのタイプをよく観察すると、copyOf()内部でSystem.arraycopy()メソッドが呼び出されている
違いは次のとおりです. arraycopy()は、ターゲット配列を必要とし、元の配列を自分で定義した配列にコピーし、コピーの開始点と長さ、および新しい配列に入れる位置 を選択することができます. copyOf()は、システムが自動的に内部に配列を新規作成し、arraycopy()を呼び出してoriginalコンテンツをcopyにコピーし、長さはnewLengthである.copyを返します.元の配列をnewLengthの長さの新しい配列にコピーし、その配列を返します.
まとめ
Array.copyOf()は、主に元の配列を新しい長さの配列にすべてコピーするために使用され、配列拡張に適している制限されたSystem.arraycopy()と見なすことができる.
public static native void arraycopy(Object src,int srcPos, Object dest, int destPos,int length);`
src-ソース配列.SrcPos-ソース配列の開始位置.dest-ターゲット配列.destPos-ターゲットデータの開始位置.length-コピーする配列要素の数.
この方法はnativeキーワードを用いて,呼び出しが他の言語で書かれた下位関数であることを示した.
Arrays.copyOf()を見てみましょう
public static 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;
}
このメソッドは、異なるデータ型に対応するそれぞれのリロードメソッドoriginal-コピーする配列newLength-返すレプリカの長さnewType-返すレプリカのタイプをよく観察すると、copyOf()内部でSystem.arraycopy()メソッドが呼び出されている
違いは次のとおりです.
まとめ
Array.copyOf()は、主に元の配列を新しい長さの配列にすべてコピーするために使用され、配列拡張に適している制限されたSystem.arraycopy()と見なすことができる.