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]
------解决思路----------------------
查了一下clone的详解,觉得在这里可能是因为clone是浅拷贝,a的clone,因为里面存放的不是对象,而是一个基本数据类型,所以clone直接在内存里面重新开辟了一块内存,用来存放新的数值,而b里面存放了2个对象,clone的时候是不会重新开辟空间建立新的对象的,只会拷贝索引,所以会出现对b的拷贝的修改会影响b本体,具体的可以看看这里
http://blog.csdn.net/zhangjg_blog/article/details/18369201
------解决思路----------------------
java克隆时,如果克隆的对象的各属性都是简单数据项,那么克隆出来的结果无误,也就是浅拷贝。
如果对象的属性中存在引用的话,那克隆出来的对象会和原对象指向相同的引用地址,这时候想克隆,需要深拷贝。
clone并不能直接作用于二维数组。
因为java中没有二维数组的概念,只有数组的数组。
所以二维数组int array[][] 中存储的实际上是两个一维数组的引用。当调用clone函数时,是对这两个引用进行了复制。
------解决思路----------------------
http://www.java3z.com/cwbwebhome/article/article8/83567.html?id=4690
java的二维数组其实不是真正意义上的二维数组
这里面有讲到,网上搜来的