| http://blog.csdn.net/shijinupc/article/details/7827507 首先觀察先System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)的聲明: public static native void arraycopy(Object src,  int  srcPos,                                          Object dest, int destPos,                                          int length);  
src - 源數(shù)組。 srcPos - 源數(shù)組中的起始位置。
 dest - 目標數(shù)組。
 destPos - 目標數(shù)據(jù)中的起始位置。
 length - 要復制的數(shù)組元素的數(shù)量。
 該方法是用了native關鍵字,調用的為C++編寫的底層函數(shù),可見其為JDK中的底層函數(shù)。
 再來看看Arrays.copyOf();該方法對于不同的數(shù)據(jù)類型都有相應的方法重載。
 
 //復雜數(shù)據(jù)類型  public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {          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;      }  public static <T> T[] copyOf(T[] original, int newLength) {      return (T[]) copyOf(original, newLength, original.getClass());  }  
由U類型復制為T類型?original - 要復制的數(shù)組
 newLength - 要返回的副本的長度
 newType - 要返回的副本的類型
 //基本數(shù)據(jù)類型(其他類似byte,short···)  public static int[] copyOf(int[] original, int newLength) {          int[] copy = new int[newLength];          System.arraycopy(original, 0, copy, 0,                           Math.min(original.length, newLength));          return copy;      }  
觀察其源代碼發(fā)現(xiàn)copyOf(),在其內(nèi)部創(chuàng)建了一個新的數(shù)組,然后調用arrayCopy()向其復制內(nèi)容,返回出去。  
總結:  
1.copyOf()的實現(xiàn)是用的是arrayCopy();  
2.arrayCopy()需要目標數(shù)組,對兩個數(shù)組的內(nèi)容進行可能不完全的合并操作。  
3.copyOf()在內(nèi)部新建一個數(shù)組,調用arrayCopy()將original內(nèi)容復制到copy中去,并且長度為newLength。返回copy;  |