我的代码是:
public class MyProgram {
public void start() {
int a = 1;
int[] b = { 1, 2, 3};
int[] c = { 1, 2, 3};
method1(a, b[0], c);
System.out.println("a = " + a);
System.out.println("b[0] = " + b[0]);
System.out.println("c[0] = " + c[0]);
}
private void method1(int x, int y, int[] z) {
x++;
y = 10;
if ( z.length >= 1 ) {
z[0] = 100;
}
System.out.println(x);
System.out.println(y);
}
}
输出是
a = 1
b[0] = 1
c[0] = 100
我真的不知道为什么只有 c[0] 改变了。
最佳答案
private void method1(int x, int y, int[] z)
注意 int
类型是原始类型,所以它是按值传递的(值被复制过来)
而int[]
类型是一个数组,所以它是通过引用传递的(对数组的引用被传递过来)
因此,当您修改 int
变量时,您正在更改副本 - 它们不会影响该函数范围之外的变量
当您修改数组时,它是通过传入的引用完成的 - 因此更改会持续存在。
关于java - 我不知道这个 void 方法是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13080767/