数组参数
题记:
在刷算法题时,发现在将数组做为参数传递后,在方法内对该数组参数
进行重新赋值,只在该方法内部生效。
执行完方法后,传入的数组参数并未发生改变。
原因分析:
在java中,不论选择值传递还是地址传递各个参数,基本类型总是按值传递。对于对象来说,是将对象的引用也就是副本传递给了方法,在方法中只有对对象进行修改才能影响该对象的值,操作对象的引用时是无法影响对象。
实例分析:
- reOrderArray(int [] array)方法对数组参数的引用进行了修改
- reOrderArray3(int [] array)方法对数组参数的值进行了修改
最后方法执行结果如下:
reOrderArray传入的array数组:[1, 2, 3, 4, 5, 6, 7]
reOrderArray赋值后的array数组:[1, 3, 5, 7, 2, 4, 6]
reOrderArray方法执行后的array数组:[1, 2, 3, 4, 5, 6, 7]
------------------分隔符-------------------
reOrderArray3传入的array数组:[1, 2, 3, 4, 5, 6, 7]
reOrderArray3赋值后的array数组:[1, 3, 5, 7, 2, 4, 6]
reOrderArray3方法执行后的array数组:[1, 3, 5, 7, 2, 4, 6]
附代码块:
public void reOrderArray(int [] array) {
int [] b = new int[array.length];
int [] c = new int[array.length];
int j = 0,k = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] % 2 ==1) {
b[j] = array[i];
j++;
}else {
c[k] = array[i];
k++;
}
}
for (int i = 0; i < k; i++) {
b[j] = c[i];
j++;
}
System.out.println("reOrderArray传入的array数组:"+Arrays.toString(array));
array = b;
System.out.println("reOrderArray赋值后的array数组:"+Arrays.toString(array));
}```
public void reOrderArray3(int [] array) {
int [] b = new int[array.length];
int [] c = new int[array.length];
int j = 0,k = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] % 2 ==1) {
b[j] = array[i];
j++;
}else {
c[k] = array[i];
k++;
}
}
for (int i = 0; i < k; i++) {
b[j] = c[i];
j++;
}
System.out.println("reOrderArray3传入的array数组:"+Arrays.toString(array));
for (int i = 0; i < array.length; i++) {
array[i] = b[i];
}
System.out.println("reOrderArray3赋值后的array数组:"+Arrays.toString(array));
}
public static void main(String[] args) {
int[] array = new int[] {1,2,3,4,5,6,7};
test13 a = new test13();
a.reOrderArray(array);
System.out.println("reOrderArray方法执行后的array数组:"+Arrays.toString(array));
System.out.println();
System.err.println("------------------分隔符-------------------");
System.out.println();
int[] array3 = new int[] {1,2,3,4,5,6,7};
a.reOrderArray3(array3);
System.out.println("reOrderArray3方法执行后的array数组:"+Arrays.toString(array3));
}