//System.arraycopy为 JVM 内部固有方法,它通过手工编写汇编或其他优化方法来进行 Java 数组拷贝 //,这种方式比起直接在 Java 上进行 for 循环或 clone 是更加高效的。数组越大体现地越明显。 //方法原型 //其中:src表示源数组,srcPos表示源数组要复制的起始位置,desc表示目标数组,length表示要复制的长度。 @HotSpotIntrinsicCandidate public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); /* 关于@HotSpotIntrinsicCandidate 这个注解是 HotSpot VM 标准的注解,被它标记的方法表明它为 HotSpot VM 的固有方法, HotSpot VM 会对其做一些增强处理以提高它的执行性能,比如可能手工编写汇编或手工编写编译器中间语言来替换该方法的实现。虽然这里被声明为 native 方法,但是它跟 JDK 中其他的本地方法实现地方不同,固有方法会在 JVM 内部实现,而其他的会在 JDK 库中实现。在调用方面,由于直接调用 JVM 内部实现,不走常规 JNI lookup,所以也省了开销。 */ //当源数组存放的是值时(int,char,long...),复制为深复制(值传递),保留源本,和生成新的副本,修改副本不会影响源数组。 //当源数组存放的是对象时,复制为浅复制(引用传递),修改副本同时会影响源数组。 /** * 在 Java 编程中经常会遇到数组拷贝操作,一般会有如下四种方式对数组进行拷贝。 * for遍历,遍历源数组并将每个元素赋给目标数组。 * clone方法,原数组调用clone方法克隆新对象赋给目标数组,更深入的克隆可以看之前的文章《从JDK角度看对象克隆》。 * System.arraycopy,JVM 提供的数组拷贝实现。 * Arrays.copyof,实际也是调用System.arraycopy。 **/