用代码测了一下(jdk 5)。主要是觉得 System.arraycopy 可能是最快的。结果出乎意料。
import java.util.Date;


public class ArrayCopyTest ...{


public static void main(String[] args) ...{
new ArrayCopyTest().arrayCopy();
}


void arrayCopy() ...{
int loop = 10000000;

Object[] srcArray1 = ...{ "sdfsdaf", new Date(), new Integer(200) };


Object[] srcArray2 = ...{ "qwerasd", new Date(), new Integer(200), srcArray1, new Object(),

new String[] ...{ "aaa", "bbb" } };

System.out.println("short array");
arrayClone(loop, srcArray1);
arrayManualCopy(loop, srcArray1);
arraySysCopy(loop, srcArray1); // was srcArray2);

System.out.println(" long array");
arrayClone(loop, srcArray2);
arrayManualCopy(loop, srcArray2);
arraySysCopy(loop, srcArray2);
}


void arrayClone(int loop, Object[] sourceArray) ...{
long time = System.currentTimeMillis();


for (int i = 0; i < loop; ++i) ...{
Object[] destArray = (Object[]) sourceArray.clone();
}

System.out.println("arrayClone " + (System.currentTimeMillis() - time));
}


void arraySysCopy(int loop, Object[] sourceArray) ...{
long time = System.currentTimeMillis();

for (int i = 0; i < loop; ++i) ...{
Object[] destArray = new Object[sourceArray.length];
System.arraycopy(sourceArray, 0, destArray, 0, sourceArray.length);
}
System.out.println("arraySysCopy " + (System.currentTimeMillis() - time));
}


void arrayManualCopy(int loop, Object[] sourceArray) ...{
long time = System.currentTimeMillis();

for (int i = 0; i < loop; ++i) ...{
Object[] destArray = new Object[sourceArray.length];

for(int j=0; j<sourceArray.length; ++j)...{
destArray[j] = sourceArray[j];
}
}
System.out.println("arrayManulCopy " + (System.currentTimeMillis() - time));
}

}

不太理解,一时也没有够好的分析手段。
学无止境,没完没了。
(第二次发文。上次居然遇上了服务器出错。倒霉。)