黑马程序员技术交流社区
标题:
数组拷贝问题
[打印本页]
作者:
何拴绪
时间:
2012-6-2 00:39
标题:
数组拷贝问题
将数组1拷贝到数组2后,然后数组2做修改元素的值后,数组1为什么也会发生变化?
作者:
杨海波
时间:
2012-6-2 00:59
这个问题是因为数据从数组1拷贝到数组2后,数组2储存的是数组1里面的数据的地址,所以当数组2改变后数组1会发生同步更改 下面我写了个例子 自己看看吧
public class ArrayCopy {
public static void main(String[] args) {
int[][] array1 = {{2,3},{5,6,8},{12,0,4}};
int[][] array2 = new int[3][];
System.arraycopy(array1,0,array2,0,array1.length);
array2[2][1] = 100;//改变数组元素值
//遍历打印array2元素
for(int i=0;i<array2.length;i++){
for(int j=0;j<array2[i].length;j++)
System.out.print(array2[i][j]+" ");
System.out.println("");
}
//遍历打印array1元素
for(int i=0;i<array1.length;i++){
for(int j=0;j<array2[i].length;j++)
System.out.print(array1[i][j]+" ");
System.out.println("");
}
}
}
复制代码
希望能帮到你
作者:
罗文杰
时间:
2012-6-2 01:08
本帖最后由 罗文杰 于 2012-6-2 01:10 编辑
拷贝过后,两个数组应该是指向同一个地址的,你利用数组2修改了元素的值的内容,这是数组1仍然是指向这些元素的地址的,所以数组1中的元素就跟着改变了。
作者:
凡延海
时间:
2012-6-2 07:06
JAVA数组的复制是引用传递,这个不同于其它语言的值传递。我在这里列举三个数组拷贝的方式:
第一种呢就是直接把数组引用变量赋值给目的数组;第二种呢就是用Arrays.copyOf()方法来复制数组;第三种就是通过for循环一个元素一个元素的赋值完成数值复制,下面是我写的一个简单的例子:
import java.util.Arrays;
public class TestCopy{
public static void main(String[] args) {
int [] a={1,2,3,4,5,6,7};
int [] b=a;
for(int i=0;i<a.length;i++)
{
System.out.println("a"+i+":"+a[i]+";"+"b"+i+":"+b[i]);
}
int c[]=Arrays.copyOf(a,a.length);
for(int i=0;i<a.length;i++)
{
System.out.println("a"+i+":"+a[i]+";"+"c"+i+":"+c[i]);
}
int [] d=new int[a.length];
for(int i=0;i<a.length;i++)
{
d[i]=a[i];
}
for(int i=0;i<a.length;i++)
{
System.out.println("a"+i+":"+a[i]+";"+"d"+i+":"+d[i]);
}
}
}
复制代码
希望对楼主有帮助
作者:
何拴绪
时间:
2012-6-2 12:29
凡延海 发表于 2012-6-2 07:06
JAVA数组的复制是引用传递,这个不同于其它语言的值传递。我在这里列举三个数组拷贝的方式:
第一种呢就是 ...
int [] a=new int[]{1,2,3,4,5,6,7};
int [] a={1,2,3,4,5,6,7};
这两种定义方法在内存分配上有区别吗?new 两个数组进行拷贝和上面的拷贝结果是一样的,这又是怎么回事啊?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2