开门见山,先说结论,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}
但是实际输出的结果为
Student{name='null', age=null}
Student{name='张三', age=18}
结果证明Java中的参数传递并不是引用传递
正确的数据示意图应为下图所示
所以我们认为Java中的参数传递是值传递