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

数组传值问题
public   void   a(int   a[])
        {
        int   b[];
        b=a;
  /*更改b数组代码*/
      }


      int   a[]={1,2,3};
         
      a(a);     //执行后,发现在方法a中更改b数组的操作,也同时作用在数组a上。是不是传递数组的地址导致的。如何使得a数组不受影响


------解决方案--------------------
clone
------解决方案--------------------
就是用clone,下面这段代码的输出结果为:
0 0 0 0 0 0 0 0 0 0
1 2 3 4 5 6 7 8 9 0

代码如下:
package com.ddpie;

public class TestArray {
public static void changeArrayValue(int[] in){
int[] tmp = in;
for(int i=0 ; i <tmp.length ; i++){
tmp[i] = 0;
}
}
public static void doNotChangeValue(int[] in){
int[] tmp = (int[]) in.clone();//关键是这行
for(int i=0 ; i <tmp.length ; i++)
tmp[i] = 0;
}
public static void main(String[] args){
int[] array = new int[]{1,2,3,4,5,6,7,8,9,0};
TestArray.changeArrayValue(array);
for(int i=0 ; i <array.length ; i++)
System.out.print(array[i]+ " ");

System.out.println();

array = new int[]{1,2,3,4,5,6,7,8,9,0};
TestArray.doNotChangeValue(array);
for(int i=0 ; i <array.length ; i++)
System.out.print(array[i]+ " ");
}
}

------解决方案--------------------
用clone()获得保护性拷贝,然后对拷贝进行处理,就没问题了。