Java 数组复制 4 种常用方法(对比 + 代码)
1. for 循环手动复制基础灵活可控逐个遍历赋值适合需要中途修改元素的场景int[]arr1{1,2,3,4,5};int[]arr2newint[arr1.length];for(inti0;iarr1.length;i){arr2[i]arr1[i];}2. Arrays.copyOf() 最常用java.util.Arrays自动创建新数组可截取/扩容importjava.util.Arrays;int[]src{10,20,30};// 完整复制int[]dest1Arrays.copyOf(src,src.length);// 只复制前2个int[]dest2Arrays.copyOf(src,2);// 扩容到5位多余补默认值0int[]dest3Arrays.copyOf(src,5);3. Arrays.copyOfRange() 指定区间复制左闭右开[from, to)int[]a{1,2,3,4,5};// 下标1~32、3、4int[]bArrays.copyOfRange(a,1,4);4. System.arraycopy() 底层原生方法性能最高native 底层实现大批量复制优先用int[]src{1,2,3,4};int[]destnewint[4];// 参数源数组源起始下标目标数组目标起始下标复制长度System.arraycopy(src,0,dest,0,src.length);5. clone() 数组自带克隆方法int[]arr{5,6,7};int[]copyarr.clone();深浅拷贝关键区分重点基本类型数组(int/byte/double)以上所有方法都是深拷贝新数组修改元素不影响原数组int[]a{1,2};int[]ba.clone();b[0]99;// a不变引用类型数组(对象数组)全部为浅拷贝只复制对象地址修改对象内部属性两边同步变化classStudent{intid;}Student[]s1{newStudent()};Student[]s2s1.clone();s2[0].id100;// s1[0].id 也变成100性能排序从快到慢System.arraycopy()clone()Arrays.copyOf for循环选用建议少量简单复制Arrays.copyOf代码最短指定区间截取Arrays.copyOfRange超大数组、追求高性能System.arraycopy简单完整克隆一维数组clone()复制时需要额外逻辑判断手写for循环