文章目录
- 概述
- 方法一:运用for循环进行拷贝
- 方法二:Java内置方法进行拷贝
- 方法三:指定区间进行拷贝
- 方法四:数组克隆clone()
概述
数组拷贝。
注意:
public static void main(String[] args) {int[] array1 = {1,2,3,4};System.out.println(myToString(array1));int[] array2 = array;System.out.println(myToString(array2));}
这不叫拷贝,因为此时只有一个数组对象。
方法一:运用for循环进行拷贝
public static void main(String[] args) {int[] array1 = {1,2,3,4};int[] array2 = new int[array1.length]; //开辟新的内存空间,存arry1.length个数据for (int i = 0; i < array1.length; i++) {array2[i] = array1[i];}System.out.println(Arrays.toString(array1));System.out.println(Arrays.toString(array2));}//执行结果
[1, 2, 3, 4]
[1, 2, 3, 4]
方法二:Java内置方法进行拷贝
用 Array.copyOf()
方法
其功能:
- 拷贝
- 扩容
public static void main(String[] args) {int[] array = {1,2,3,4};//拷贝int[] array1 = Arrays.copyOf(array,array.length);System.out.println(Arrays.toString(array));System.out.println(Arrays.toString(array1));System.out.println("=======================");//扩容int[] array2 = Arrays.copyOf(array,array.length*2);System.out.println(Arrays.toString(array));System.out.println(Arrays.toString(array2));}
【输出结果】
方法三:指定区间进行拷贝
此方法的底层源码:
public static native void arraycopy(Object src, int srcPos, Object desc, int destPos,int length);
- src:从哪里拷贝
- srcPos:从拷贝数组的哪个位置开始拷贝
- dest:拷贝到哪里
- destPos:从拷贝数组的拷贝到哪个位置
- length:拷贝多长
public static void main(String[] args) {int[] array1 = {1,2,3,4};int[] array2 = new int[array1.length]; //开辟新的内存空间,存arry1.length个数据System.arraycopy(array1,1,array2,0,array1.length-1); //从array1的0位置开始,拷贝到array2的0下标下,且拷贝的长度为array1.length-1System.out.println(Arrays.toString(array1));System.out.println(Arrays.toString(array2));}//输出结果
[1, 2, 3, 4]
[2, 3, 4, 0]
【也可以缩小拷贝】
public static void main(String[] args) {int[] array1 = {1,2,3,4};int[] array2 = Arrays.copyOf(array1,array1.length/2); System.out.println(Arrays.toString(array1));System.out.println(Arrays.toString(array2));}//输出结果
[1, 2, 3, 4]
[1, 2]
方法四:数组克隆clone()
【概述】
克隆的意思就是产生一个副本。
【代码】
public static void main(String[] args) {int[] array1 = {1,2,3,4};int[] array2 = array1.clone();System.out.println(Arrays.toString(array1));System.out.println(Arrays.toString(array2));System.out.println("===================");array2[0] = 999;System.out.println(Arrays.toString(array1));System.out.println(Arrays.toString(array2));}
【运行结果】
此时克隆完成之后,修改array2的值不会影响array1的值,所以为深拷贝!