我无法弄清楚这种void方法是如何工作的

use*_*095 5 java arrays void

我的代码是:

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]发生了变化.

sam*_*hen 3

private void method1(int x, int y, int[] z)

请注意,int类型是基元,因此它是按值传递的(值被复制)

并且int[]type是一个数组,所以它是通过引用传递的(对数组的引用被传递过去)

因此,当您修改int变量时,您正在更改副本 - 它们不会影响该函数范围之外的变量

当您修改数组时,它是通过传入的引用完成的 - 因此更改会持续存在。

  • 你应该更清楚,数组仍然是按值传递的,它的值只是对内存中某个位置的引用。 (3认同)