java一维数组和二位数组调用clone方法的区别

硅谷探秘者 算法基础 1300 0 0

一维数组的clone方法

测试代码

    public static void main(String[] args){
        int a[]=new int[]{1,2,3};
        int b[]=a.clone();
        b[0]=0;
        System.out.println(a[0]+ " "+b[0]);
    }

结果打印的是 1 0 说明一位数组的clone方法是深拷贝数组b和数组a并不是同一个对象

二位数组的clone方法

测试代码

    public static void main(String[] args){
        int[][] a=new int[][]{ {1,2,3}, {4,5,6}, {7,8,9}};
        int[][] b=a.clone();
        b[0][0]=0;
        System.out.println(a[0][0]+ " "+b[0][0]);
    }

打印的是 0 0 修改数组b的数据,数组a中的数据会改变

如果执行代码 System.out.println(a[0]==b[0]); 会发现输出的是 true 

以上结果说明二位数组的clone方法是浅拷贝。

事实上java中并没有二位数组的概念,二位数组实际上是对多个一维数组的引用。

clone方法只拷贝了这些一位数组的引用。所以修改的时候实际上还是修改的原来的数组。

java中如何实现二位数组的深拷贝

int[][] a=new int[][]{ {1,2,3}, {4,5,6}, {7,8,9}};
        int[][] b=new int[a.length][];
        for(int i=0;i<a.length;i++){
            b[i]=a[i].clone();
        }

评论区
请写下您的评论...
暂无评论...
猜你喜欢
前端(h5) 2248 functioncopyArr(arr){ varout=[], i=0, len=arr.length; for(;ilen;i++){ if(arr[i]instanceofArray){ out[i]=this.copyArr(arr[i]); }else{ out[i]=arr[i]; } } returnout; }
weblog 3341 定义int[,]area={{0,0},{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,-1},{-1,1}};遍历for(inti=0
数据结构与算法 4633 intcol=sizeof(arr[0])/sizeof(int);//列//打印arrvoidprintArr(){ for(inti=0;irow;i++){ for(intj=0;jcol;j++)
javascript,前端 1143 jsjavascriptforinforof,forof遍历原理 forin是ES5,forof是ES6forin是无序遍历或对象,也就是随机遍历,不按照顺序来
weblog 4105 vue使v-for遍历遍历对象splic(...)使请参考:http://www.jiajiajia.club/blog/artical/262!DOCTYPEhtmlhtml
前端(h5) 2708 概念浅拷贝只会拷贝层,如果中是对象,则只会拷贝对象引,如果是基本据类型则会拷贝值。深拷贝多层次拷贝,如果中是对象,则会连同对象起拷贝。concat实现浅拷贝vara=[{id:1
数据结构与算法 5926 试题描述:思路:表示完全叉树,先序遍历式遍历每节点,储存每,因为据规模小于100000所以个容量为17即可。计算完每,再比较层最小之最大
数据结构与算法 9330 问题描述:思路:遍历1-n个,判断是否满足条件。代码:packageclub.test;publicclassTestMain11{ publicstaticvoidmain(String
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1 2024-08  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。