Java方法参数传递方式

来源:互联网 发布:最新博客网站程序源码 编辑:程序博客网 时间:2024/04/30 15:19

参考: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.引用调用:接收的是调用者提供的变量地址。

(可以参考百度)