java - 我不知道这个 void 方法是如何工作的

标签 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); 
    }
}

输出是

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/

相关文章:

java - JUnit 使用 Mockito 测试用户输入

arrays - 在 swift 中调用实例方法 'append' 时没有完全匹配

javascript - 从数组创建对象数组

javascript - 映射默认值

c++ - cpp(15) : error C2182: 'input' : illegal use of type 'void'

python - Python 中有类似 "void lambda"的东西吗?

c++ - 调用C++成员函数指针: this-pointer gets corrupted

java - JSF 2.0 和复选框

java - 需要示例程序来抛出 InterruptedException

java - ANT 结帐任务失败