【发布时间】:2021-01-15 09:56:25
【问题描述】:
调用静态方法时数组元素的值发生变化,参数传递与参数相同的数组,但原始值没有变化
当我们将数据结构作为方法参数传递时,它的工作方式是否不同? 想知道为什么在使用数组的方法调用后数组元素会发生变化.. 我在最后一个 syso 语句中期望值为 0 而不是 999
public class TestStatic {
public static int square (int x)
{
x = x + 1;
return x * x;
}
public static int[] changeArr(int a[])
{
a[0] = 999;
return a;
}
public static void main(String[] args)
{
int a = 10;
System.out.println((square(a)));
System.out.println(a);
int arr[] = {0,0};
changeArr(arr);
System.out.println(arr[0]);
}
}
实际输出:
121
10
999
我期待
121
10
0
【问题讨论】:
-
changeArr(arr)-arr是对您在main方法中声明的数组的引用。由于您传递了对changeArr方法的引用,因此当方法更改第一个索引处的值时,它会更改您在main方法中声明的相同数组。 -
可能,可以读作
a[]的签名是int类型的,有点误导。将其更改为:public static int[] changeArr(int[] a) { ... }并阅读:a是int[]类型的参数。所以它是一个对象,对象是按引用而不是按类型传递的。
标签: java arrays static-methods