Java中对于二维数组的clone
来源:互联网 发布:数据口径不一致的意思 编辑:程序博客网 时间:2024/05/22 00:33
昨天写Java的时候写了一行int[][] c = a.clone(),结果发现后续对c的操作同时也作用到了a上了,当时一脸懵逼啊,说好的clone呢,怎么引用又扯不干净了。单步调试看看,好家伙,还真的是……
今天上网查了查,原来因为Java跟C/C++一样,没有二维数组,二维数组是一维数组的一维数组,用int[][] c = a.clone(),实际上是把a[0],a[1],a[2]给clone了一份给c,也就是把每一行的一维数组的引用拷贝了一份给c,但是这些引用所指向的内存空间还是原来那一块,并不是彻底的深拷贝,在后续对c的操作中还是会同时作用在a上。因此应该对每一行的一维数组分别进行clone,才是彻底的深拷贝。
测试代码:
package package2;public class Test {public static void main(String[] args) {int[][] a = new int[3][3];int cnt = 0;for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {a[i][j] = ++cnt;}}int[][] b = new int[3][];for (int i = 0; i < 3; i++) {b[i] = a[i].clone();}b[0][0] = -1;System.out.println("a:");for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {System.out.print(a[i][j] + " ");}System.out.println("");}System.out.println("");System.out.println("b:");for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {System.out.print(b[i][j] + " ");}System.out.println("");}System.out.println("");int[][] c = a.clone();c[0][0] = -2;System.out.println("a:");for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {System.out.print(a[i][j] + " ");}System.out.println("");}System.out.println("");System.out.println("c:");for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {System.out.print(c[i][j] + " ");}System.out.println("");}}}
0 0
- Java中对于二维数组的clone
- 关于java中对于二维数组使用clone出错之后
- Java中二维数组和一维数组的clone
- 当Java的二维数组遇上clone
- 对于java中clone()函数的理解
- Java中数组的clone
- java基础随笔-for each对于二维数组的处理
- Java array[][] .clone() 二维数组和一维数组不同
- java中二维数组
- java中二维数组的越界问题
- Java中二维数组的长度
- java中二维数组的操作
- Java中数组的clone方法为什么是浅复制
- Java中数组的使用方法? 初始化,二维数组,数组复制
- java的二维数组
- Java中数组中的clone()方法
- Java中数组中的clone()方法
- java 中的clone() 在数组中
- SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码
- 关于getClass().getClassLoader()
- 继《NSUserDefaults轻量级永久存储数据使用介绍》相关工具,欢迎补充修正
- ios runtime Method Swizzling
- 简单看一下ROSPY
- Java中对于二维数组的clone
- ps抠图技巧
- maven项目编译跳过test命令
- ListView点击展开布局出现重复布局的解决
- express+mongoDB实现的博客系统
- 一些快捷键(持续补充)
- mybatis-config配置 介绍
- LWIP手记【A】arp高速缓冲区清零
- C/C++创建和删除文件夹操作