栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java数组拷贝

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java数组拷贝

浅拷贝:

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

深拷贝:

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

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

		int arr1[] = {1,2,3};
		int arr2[] = arr1.clone();
		int arr3[] = Arrays.copyOf(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.println(Arrays.toString(arr2)); //[1, 2, 3]
		System.out.println("copyOf方法克隆:");
		System.out.println(Arrays.toString(arr3)); //[1, 2, 3]
		System.out.println("arraycopy方法克隆:");
		System.out.println(Arrays.toString(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] = Arrays.copyOf(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
		}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/362219.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号