我的代码是:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是
a = 1
b[0] = 1
c[0] = 100
Run Code Online (Sandbox Code Playgroud)
我真的不知道为什么只有c [0]发生了变化.
private void method1(int x, int y, int[] z)
请注意,int类型是基元,因此它是按值传递的(值被复制)
并且int[]type是一个数组,所以它是通过引用传递的(对数组的引用被传递过去)
因此,当您修改int变量时,您正在更改副本 - 它们不会影响该函数范围之外的变量
当您修改数组时,它是通过传入的引用完成的 - 因此更改会持续存在。