日期:2014-05-20  浏览次数:20728 次

数组复制的问题
学习数组复制的过程中,代码如下:
package test;
import java.util.*;
public class SelfStudy_Array {
public static void main(String[] args) {
int []a={1,222,56,4,33}; //define the array with 5 elements static 
int []b = a; //copy the array a to b
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));

Arrays.sort(a);
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
}
}
实际运行结果
[1, 222, 56, 4, 33]
[1, 222, 56, 4, 33]

[1, 4, 33, 56, 222]
[1, 4, 33, 56, 222]

请问为何下划线处的数组b不是保留先前的内容,而是随着数组a的排序调整而变化。
如果需要保持数组b的内容不变,这段代码应该怎样调整?

------解决方案--------------------
int []b = a; //copy the array a to b

你这个不是复制啊..只是声明了一个数组b引用着a数组指向的那个数组,即a和b同时指向的是同一个数组
当你对数组进行操作后,a,b都要变化啊
------解决方案--------------------
int []b = a; 这句不是复制,这是将b的引用指向a。所以a变了,b也就变了。

复制请用Arrays.copyOf()
------解决方案--------------------
int []b = a; 
这样赋值 ,则b和a执行的都是一块内存空间,所以a变化 或者b变化 ,两者都会变化 ;
你可以在 
int []b = a; //copy the array a to b
下面加上
System.out.println("a = " + a) ;
System.out.println("b = " + b) ;

看看打出来的应该是一样的即是@后面的数据是一样的
------解决方案--------------------
可以使用System.arraycopy(),见java数组的复制