Java 数组拷贝技术:利用 Arrays.copyOf 实现多态数据类型的拷贝实战
Arrays.copyOf通过泛型和重载支持所有数组类型,底层调用原生System.arraycopy实现高效浅拷贝。扩容时自动填充默认值,源数组为null则抛空指针异常。引用类型仅复制引用,需注意泛型类型擦除与子类数组赋值陷阱。返回新数组。
先做个精炼总结:Arrays.copyOf 靠泛型和重载覆盖所有数组类型,底层统一调用 System.arraycopy 实现高效浅拷贝。基本类型走对应重载,引用类型走泛型版本,返回正确类型的数组。扩容时自动填默认值,源数组为 null 则抛出 NPE。就这么简单,但用起来有几个容易踩的坑,下面展开聊聊。

说到拷贝数组,Arrays.copyOf 几乎是最省事的方案——不管你是 int[]、String[] 还是自定义对象数组,它都能一把搞定。它不关心具体类型,只认源数组和目标长度,多态支持全靠泛型和重载托底,实际拷贝过程跟数据类型无关。
支持所有数组类型,无需手动区分
Arrays.copyOf 为每种基本类型(int、double、boolean 等)都准备了重载方法,引用类型则单独配了一个泛型版本。JVM 根据实参类型自动选人,开发者不用写 if 判断,更不用手动做类型转换。
- 基本类型数组:直接走对应重载,比如 Arrays.copyOf(int[], int)
- 引用类型数组:走泛型方法 Arrays.copyOf(T[], int),编译器自动推断类型,运行时保留组件类型
- 重点:泛型版本返回的是 T[],不是
Object[],省得你事后强转
拷贝逻辑统一:底层调用 System.arraycopy
所有重载版本最终都委托给 native 方法 System.arraycopy,效率高、语义一致——浅拷贝、连续内存复制、越界检查全交给 JVM 兜底。
- 新数组长度大于原数组?多余位置自动填默认值(int 填 0,引用类型填 null)
- 新数组长度小于原数组?只复制前 N 个元素,不会抛异常
- 源数组为
null?直接扔NullPointerException,调用方必须自己判空
实战中避开常见陷阱
方法本身不复杂,但类型擦除、泛型边界和子类数组场景容易出幺蛾子。
- 别用
Object[]接收子类数组再拷贝——运行时类型信息一丢,后面就麻烦了。直接拿泛型方法操作原始数组更靠谱 - 拷贝
String[]、Integer[]这些不可变类型完全没问题;但拷贝自定义对象数组时,只是复制了引用,对象本身不会深拷贝 - 需要扩容同时保留原有内容?直接写 Arrays.copyOf(arr, arr.length + 10) 就行,比先
new再System.arraycopy简洁多了
结合泛型工具方法提升复用性
还可以封装一层来适配不同场景,比如加个安全判空或者默认值填充。
- 示例:
public staticT[] safeCopy(T[] src, int newLength) { return src == null ? (T[]) new Object[newLength] : Arrays.copyOf(src, newLength); } - 基本类型数组还是建议直接用原生重载——避免装箱拆箱带来的额外开销
- 泛型方法里不能直接
new T[newLength](类型擦除记得吧),必须靠反射或借用Object[]转型。Arrays.copyOf内部正是这么处理的
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。
Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,













