JavaにおけるSystem.arraycopy()とArrays.copyOf()の違い

1278 ワード

まず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()メソッドが呼び出されている
違いは次のとおりです.
  • arraycopy()は、ターゲット配列を必要とし、元の配列を自分で定義した配列にコピーし、コピーの開始点と長さ、および新しい配列に入れる位置
  • を選択することができます.
  • copyOf()は、システムが自動的に内部に配列を新規作成し、arraycopy()を呼び出してoriginalコンテンツをcopyにコピーし、長さはnewLengthである.copyを返します.元の配列をnewLengthの長さの新しい配列にコピーし、その配列を返します.

  • まとめ
    Array.copyOf()は、主に元の配列を新しい長さの配列にすべてコピーするために使用され、配列拡張に適している制限されたSystem.arraycopy()と見なすことができる.