发布于2026-07-05 阅读(0)
扫一扫,手机访问
先做个精炼总结:Arrays.copyOf 靠泛型和重载覆盖所有数组类型,底层统一调用 System.arraycopy 实现高效浅拷贝。基本类型走对应重载,引用类型走泛型版本,返回正确类型的数组。扩容时自动填默认值,源数组为 null 则抛出 NPE。就这么简单,但用起来有几个容易踩的坑,下面展开聊聊。

说到拷贝数组,Arrays.copyOf 几乎是最省事的方案——不管你是 int[]、String[] 还是自定义对象数组,它都能一把搞定。它不关心具体类型,只认源数组和目标长度,多态支持全靠泛型和重载托底,实际拷贝过程跟数据类型无关。
Arrays.copyOf 为每种基本类型(int、double、boolean 等)都准备了重载方法,引用类型则单独配了一个泛型版本。JVM 根据实参类型自动选人,开发者不用写 if 判断,更不用手动做类型转换。
Object[],省得你事后强转所有重载版本最终都委托给 native 方法 System.arraycopy,效率高、语义一致——浅拷贝、连续内存复制、越界检查全交给 JVM 兜底。
null?直接扔 NullPointerException,调用方必须自己判空方法本身不复杂,但类型擦除、泛型边界和子类数组场景容易出幺蛾子。
Object[] 接收子类数组再拷贝——运行时类型信息一丢,后面就麻烦了。直接拿泛型方法操作原始数组更靠谱String[]、Integer[] 这些不可变类型完全没问题;但拷贝自定义对象数组时,只是复制了引用,对象本身不会深拷贝new 再 System.arraycopy 简洁多了还可以封装一层来适配不同场景,比如加个安全判空或者默认值填充。
public static T[] safeCopy(T[] src, int newLength) { return src == null ? (T[]) new Object[newLength] : Arrays.copyOf(src, newLength); } new T[newLength](类型擦除记得吧),必须靠反射或借用 Object[] 转型。Arrays.copyOf 内部正是这么处理的
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8