学习数组复制的过程中,代码如下:
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的内容不变,这段代码应该怎样调整?

解决方案 »

  1.   

    这货不是复制,复制请用System.arrayCopy
      

  2.   

    int []b = a; //copy the array a to b你这个不是复制啊..只是声明了一个数组b引用着a数组指向的那个数组,即a和b同时指向的是同一个数组
    当你对数组进行操作后,a,b都要变化啊
      

  3.   

    int []b = a;  这句不是复制,这是将b的引用指向a。所以a变了,b也就变了。复制请用Arrays.copyOf()
      

  4.   

    那么请问这句“int []b = a;”代表什么意思?
    另外,我把代码改为
    int []b=new int[a.length];
    System.arraycopy(a, 0, b,0, a.length);
    成功了,谢谢。
      

  5.   

    直接用java.util工具包中的 system.arraycopy
      

  6.   


    谢谢帮我指明。
    我也搜了Arrays.copyOf的方法,代码改成下面就可以了。
    int[] b = Arrays.copyOf(a, a.length);
    System.out.println(Arrays.toString(b));谢谢大家的回复,受教了。
      

  7.   

    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) ;看看打出来的应该是一样的即是@后面的数据是一样的
      

  8.   

    可以使用System.arraycopy(),见java数组的复制
      

  9.   


    int []a={1,222,56,4,33}; //define the array with 5 elements static  
    int []b = new int[a.length]; //copy the array a to b
    System.arraycopy(a, 0, b, 0, a.length);
    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));