java数组复制需按需求选择方法:完整拷贝用arrays.copyof(),高效截取用arrays.copyofrange(),精细控制用system.arraycopy(),简洁深拷贝用clone()。

Java 数组复制不是“选一个就行”,而是要看你到底要什么:是快速扩容?只取中间一段?避免原数组被意外改?还是在多线程里做防御性拷贝?方法选错,轻则性能掉一截,重则逻辑出 bug。
要完整拷贝且代码简洁,用 Arrays.copyOf()
这是日常开发中最常用、最省心的方式。它自动创建新数组,你只需传入原数组和目标长度。
- 如果新长度大于原数组,多出位置填默认值(如 int 填 0,引用类型填 null)
- 如果新长度更小,就只拷贝前 N 个元素
- 底层其实调用的是 System.arraycopy(),性能不错,又不用自己 new 数组
示例:int[] copy = Arrays.copyOf(original, original.length);
要拷贝某一段或往目标数组特定位置贴,用 System.arraycopy()
这是 JVM 底层实现的 native 方法,性能最优,适合对效率敏感或需要精细控制的场景。
- 必须提前准备好目标数组(不能自动创建)
- 支持任意起始/偏移:比如把原数组第 2–4 个元素,拷到目标数组第 5 位开始的位置
- 参数顺序容易记混,建议封装成工具方法复用
示例:System.arraycopy(src, 2, dest, 5, 3); // 拷 3 个元素,从 src[2] 到 dest[5]
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
要部分拷贝且自动建新数组,用 Arrays.copyOfRange()
它是 copyOf 的增强版,专为“截取”设计,比手动算下标+copyOf 更安全直观。
- from 是包含的,to 是不包含的(符合 Java 通用区间习惯)
- 即使 to 超过原数组长度,也不会报错,空位自动补默认值
- 常用于分页、切片、日志截断等逻辑
示例:int[] slice = Arrays.copyOfRange(data, 10, 20); // 取索引 10~19
要最简写法且只做完整深拷贝,考虑 clone()
数组本身实现了 Cloneable,调用 clone() 会返回一个内容相同、内存独立的新数组。
- 语法极简:int[] copy = original.clone();
- 仅支持完整拷贝,不能指定范围或长度
- 注意:clone 返回 Object,需强制转型;对二维数组只浅拷贝第一层
适合工具类内部快速备份、单元测试造数据等轻量场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










