参考:Java核心技术I
程序设计语言中有关将参数传递给方法(这里就说2种):
1.call by value 值调用
2.call by reference 引用调用
1.值调用:表示方法接收的是调用者提供的值。
在java中,总是采用按值调用。
当传递的是基本类型,如int,double,float等时,方法得到的时所有参数值的一个拷贝。所以
在方法体内,无论怎么修改拷贝变量,都无法改变传递给它的任何参数变量的内容。
除了基本类型,还有另外一种参数就是对象了。但是,在java中同样时采用call by value(按值调用)。这里有许多人
都存在误解,认为是call by reference。
引用调用强调的是调用者给方法提供变量的地址,而在java中其实不是。当在方法中传递一个对象时,调用者会将
对象参数(对象变量名,是对对象的引用)拷贝一份(这里拷贝的是一份新的对象引用,而不是新的对象),再将
该拷贝引用传递给方法。这里与call by referencce的主要区别就是,call by reference强调的是传递变量的地址(
也就是对象变量的地址),而再java中实际传递的却不是这个地址,而是引用的拷贝。所以说这种传值也是call by value。
举例说明:
1.call by value:
int x=1;
int y=2;
chang(x,y);
输出x:1 y:2
无论再chang中怎么改,对外面的x,y都没影响。
如果是引用调用,那么再chang(x,y)的参数里,传递的是地址,所以再chang里的任何修改,将直接影响外面的x,y
(值调用就是以上这个意思)把这个例子里的基本类型换成对象,同样有效。唯一的区别是,通过调用引用的对象里的
方法可以修改这个对象里的值,这样就影响了外部的x,y了。因为传递对象时,传递的时引用拷贝,而不是真正拷贝另外
一个对象。实参和形参都访问同一个对象(在内存中)。
2.引用调用:接收的是调用者提供的变量地址。
(可以参考百度)