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; }
(4)查看System.arraycopy的源码,可以发现它实质上是通过Jni调用本地方法,及c/c++已经编译成机器码的方法,所以快。
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
(5)clone的源码不详,鄙人无法比较
System.arraycopy()
clone():
package com.njcx.shuati; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; public class ShuaTi { public static void main(String[] args) { int[] arr = new int[10000000]; int[] descArr = new int[arr.length]; // System.arraycopy(src, srcPos, dest, destPos, length); for (int i = 0; i < arr.length; i++) { arr[i] = (int) Math.random() * 10000; } long date1 = System.currentTimeMillis(); System.arraycopy(arr, 0, descArr, 0, arr.length); long date2 = System.currentTimeMillis(); System.out.print("arrayCopy花费时间:"); System.out.println(date2 - date1); int[] descArr2 = arr.clone(); long date3 = System.currentTimeMillis(); System.out.print("clone花费时间:"); System.out.println(date3 - date2); int[] descArr3 = Arrays.copyOf(arr, arr.length); long date4 = System.currentTimeMillis(); System.out.print("copyOf花费时间:"); System.out.println(date4 - date3); } }运行结果: