Java中的参数传递是值传递还是引用传递?

151 阅读1分钟

开门见山,先说结论,Java中的参数传递是值传递,不存在引用传递。

值传递和引用传递的概念

值传递(pass by value): 在调用函数时将实际参数复制一份传递到函数中,这样即使在函数中对参数修改,也不会影响到实际参数。

引用传递(pass by reference): 在调用函数时将实际参数的地址值传递到函数中,当函数中对该参数修改时,会影响到实际参数。

这里我们用反证法,假设Java中的参数传递是引用传递

public static void main(String[] args) {
    Student zs = new Student("张三", 18);
    changeValue(zs);
    System.out.println(zs);
}

public static void changeValue(Student student){
    student = new Student();
    System.out.println(student);
}

如果参数传递是引用传递,输出的结果应该均为null,且数据示意图应该如下图所示

Student{name='null', age=null}
Student{name='null', age=null}

image.png

但是实际输出的结果为

Student{name='null', age=null}
Student{name='张三', age=18}

结果证明Java中的参数传递并不是引用传递

正确的数据示意图应为下图所示

image.png

所以我们认为Java中的参数传递是值传递