system.arraycopy略快于arrays.copyof,因后者本质是新建数组加arraycopy;前者为native内存操作,适合复用目标数组或子区间复制,后者更简洁安全,适用于全新副本场景。

两者性能差异极小,实际几乎可以忽略——System.arraycopy 略快,但差距只存在于新建数组那一步的开销上。
底层都走 JVM 内存块拷贝
Arrays.copyOf 内部就是先 new 一个新数组,再调用 System.arraycopy 完成数据搬运。也就是说,它 = 新建数组 + arraycopy。而 System.arraycopy 是 native 方法,直接映射到 JVM 底层的内存操作(类似 C 的 memmove),没有额外封装逻辑。
对基本类型数组,JVM 还可能进一步优化为 CPU 级别指令;对象数组则始终是逐引用复制,不涉及对象内容深拷贝。
真正影响性能的不是 API,而是你的内存意图
- 已有目标数组、需循环复用(如网络缓冲区、音视频帧处理)→ 用 System.arraycopy,避免每次分配新数组带来的 GC 压力
- 每次都要全新副本、代码简洁优先 → Arrays.copyOf 更安全省心,少写两行,也少一个空指针或越界风险
- 要复制子区间(比如从索引 2 开始取 5 个)→ 只能用 System.arraycopy;若只是截取前 N 个,Arrays.copyOfRange 更直观
常见误判点
有人测出 Arrays.copyOf 慢 10%,其实是测试方式问题:没把“新建数组”这部分开销单独剥离。如果用 warm-up 充分、大数组、多次迭代的 benchmark,两者耗时曲线基本重合。
另外,Android 低版本(API











