clone方法的使用

import java.util.Arrays;

public class Test {
static void fun(int a[]){
int array[]=a.clone();
array[0]=-1;
}
static void fun(int b[][]){
// int array[][]=b;
int array[][]=b.clone();
//为什么这里没有复制b引用的对象呢?而上面一维数组却复制了
array[0][0]=-2;
}
public static void main(String[] args){
int one[]={1,2,3};
int two[][]={{1,2},{3,4,5}};
fun(one);
fun(two);

//输出
System.out.println("一维数组:"+Arrays.toString(one));
System.out.print("二维数组:");
for(int n[]:two)
System.out.print(Arrays.toString(n));
}
}


输出结果为:
一维数组:[1, 2, 3]
二维数组:[-2, 2][3, 4, 5]
...全文
189 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
static void fun(int b[][]){
        int array[][] = new int[b.length][];
        for(int i=0;i<b.length;i++){
            array[i]=new int[b[i].length];
            for(int j=0;j<b[i].length;j++)
                array[i][j]=b[i][j];
        }
        array[0][0]=-2;  
    }
看来还得是一维一维地拷贝
Magical茏 2014-10-03
  • 打赏
  • 举报
回复
引用 3 楼 baidu_15037329 的回复:
综合楼上两个,我想问一下,深拷贝怎么做
想深拷贝的的类 实现Clonnable接口,然后自己去实现clone()方法.
姜小白- 2014-10-03
  • 打赏
  • 举报
回复
java中只存在数组[],没有真正意义上的二维数组及多维数组 二维数组或多维数组的深拷贝,要一维一维的拷贝,然后放在一起 参考 二维数组拷贝
scmod 2014-10-03
  • 打赏
  • 举报
回复
http://www.java3z.com/cwbwebhome/article/article8/83567.html?id=4690 java的二维数组其实不是真正意义上的二维数组 这里面有讲到,网上搜来的
综合楼上两个,我想问一下,深拷贝怎么做
姜小白- 2014-10-03
  • 打赏
  • 举报
回复
java克隆时,如果克隆的对象的各属性都是简单数据项,那么克隆出来的结果无误,也就是浅拷贝。 如果对象的属性中存在引用的话,那克隆出来的对象会和原对象指向相同的引用地址,这时候想克隆,需要深拷贝。 clone并不能直接作用于二维数组。 因为java中没有二维数组的概念,只有数组的数组。 所以二维数组int array[][] 中存储的实际上是两个一维数组的引用。当调用clone函数时,是对这两个引用进行了复制。
man9527 2014-10-03
  • 打赏
  • 举报
回复
查了一下clone的详解,觉得在这里可能是因为clone是浅拷贝,a的clone,因为里面存放的不是对象,而是一个基本数据类型,所以clone直接在内存里面重新开辟了一块内存,用来存放新的数值,而b里面存放了2个对象,clone的时候是不会重新开辟空间建立新的对象的,只会拷贝索引,所以会出现对b的拷贝的修改会影响b本体,具体的可以看看这里 http://blog.csdn.net/zhangjg_blog/article/details/18369201

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧