java中的参数传递方式只存在值传递。
在参数传递过程中,实质是将实参的值拷贝了一个副本赋给形参变量,而实参自己并不受形参的改变而影响自己。
举个例子:你将整型int 的两个变量的值传递给一个方法,在方法内将两个变量的数值进行交换,方法返回到main时,输出这两个变量,你会发现对这两个变量并没有影响。实质就是main方法调用别的方法时,会为别的方法也生成一个方法栈用于存储该方法的局部变量,且调动方法时传递的参数只是当前变量的一个副本,所以在方法内交换形参的数值对main方法内的局部变量时没有任何影响的。
如下图所示
可能有人会有疑惑,那当形参变量为对象引用时,通过形参变量不是能够改变对象的值吗?确实,但是其改变的是引用指向的对象的值,而不是实参的值。实参所传递给形参的也是实参值的一个副本,只不过这个值刚好是指向对象的地址值而已,使得形参可以操作所指向的对象。此时实参和形参都指向了同一个对象,给人一种引用传递的假象。