在Java中,基本数据类型的赋值和拷贝如下:
例如
int num = 1;
int pum = num;
pum = 3;
此时输出sum的值还是1,而pum的值则为3。
对于数组来说,该操作为引用赋值(地址拷贝)
例如:
int [] arr1 = {1,2,3};
int [] arr2 = arr1;
int [0] = 8;
此时arr1和arr2输出的都是{1,2,3}。
上面讲的基本数据类型,他们的值是存放在栈里面,作为数据的拷贝,他们之间互不影响。而数组在栈里面存放的是地址,他的数据空间在堆里面,也就是说,arr1的数据空间和arr2的数据空间是一样的,共享的,如果修改了arr2,arr1也会跟着改变。简单的画一下示意图:
如果让每个数组拥有独立的数据空间,那他们的值互相将不会受到影响。
int [] arr1 = {1,2,3};
int [] arr2 = new arr2[arr1.length];
int [0] = 6;
此时输出arr1还是不变{1,2,3}
而arr2的值为{1,6,3}
此时他们修改数据互不影响。