java数组拷贝

阅读: 评论:0

java数组拷贝

java数组拷贝

浅拷贝:

数组如果存放引用类型地址,进行拷贝后,原数组中存放的地址拷贝到新数组中,此时是两个相同的引用指向一个对象。如果原数组把内容更改,拷贝的数组内容对应也做更改。

深拷贝:

新数组的地址与原数组的地址不同,不是简单的引用拷贝。原数组内容改变时,新数组的内容不会改变。

数组内容是简单类型的,如int、float甚至String类型,使用clone()、copyOf()、arraycopy()方法拷贝,实现的都是深拷贝。新的数组放在一个新的地址中。

		int arr1[] = {1,2,3};int arr2[] = arr1.clone();int arr3[] = pyOf(arr1, arr1.length);int arr4[] = new int[3];System.arraycopy(arr1, 0, arr4, 0, arr1.length);arr1[2] = 9; //改变arr1 看看复制的数组有无改变System.out.println("clone方法克隆:");System.out.String(arr2)); //[1, 2, 3]System.out.println("copyOf方法克隆:");System.out.String(arr3)); //[1, 2, 3]System.out.println("arraycopy方法克隆:");System.out.String(arr4)); //[1, 2, 3]

但一个多维数组的拷贝,不能直接用以上三个方法直接拷贝。而应该用for循环,把多维数组分成一维的数组来拷贝,这样每个一维数组都是一个新的地址,组合成的多维数组也是新的地址。

		int arr1[][] = {{1,1,1},{2,2,2},{3,3,3}};int arr2[][] = new int[3][3];for(int i = 0;i < 3;i++) {arr2[i] = arr1[i].clone();}int arr3[][] = new int[3][3];for(int i = 0;i < 3;i++) {arr3[i] = pyOf(arr1[i], arr1[i].length);}int arr4[][] = new int[3][3];for(int i = 0;i < 3;i++) {System.arraycopy(arr1[i], 0, arr4[i], 0, arr1[i].length);}arr1[2][2] = 9; //改变arr1 看看复制的数组有无改变System.out.println("clone方法克隆:");for(int i = 0;i < 3;i++) {System.out.println(arr2[i]); //[I@15db9742 [I@6d06d69c [I@7852e922}System.out.println("copyOf方法克隆:");for(int i = 0;i < 3;i++) {System.out.println(arr3[i]); //[I@4e25154f [I@70dea4e [I@5c647e05}System.out.println("arraycopy方法克隆:");for(int i = 0;i < 3;i++) {System.out.println(arr4[i]); //[I@33909752 [I@55f96302 [I@3d4eac69}

本文发布于:2024-02-05 05:44:48,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170725475163544.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数组   java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23