数组传值问题
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()获得保护性拷贝,然后对拷贝进行处理,就没问题了。