(2)引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。(形参值的变化会影响实参值)
对于基本类型的参数,java虚拟机所做的工作是将参数的值拷贝一份,然后将拷贝的值传递到方法的内部,作为局部变量。
我们回去看看上面的程序:
public void changeInt(int i){
i = 1;
}
当方法调用的时候,但是他们是不同的变量,i是change()中的局部变量。change()结束后,i的生命周期结束会被销毁。而name是Person的一个属性,也是个全局变量,因而对i的改变不会影响name的值。结合上面值传递的定义,可以看出此处的传递是值传递。这里的参数是基本类型的,也就是说基本类型参数的传递是值传递。
如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的地址,所以不会改变参数的值。