Java的方法参数传递
方法参数传值
按……调用(call by)是一个标准的计算机术语,用来描述各种程序设计语言。
java中总是采用按值调用。也就是说,方法得到的是参数值的一个拷贝,特别是方法不能修改传递给它的任何参数变量的内容。
例如,以下的调用:
public class Test { public int num; public static void main(String[] args) { Test t = new Test(); t.num= 0; add(t.num); System.out.println(t.num); } public static void add(int x) { x+=3; } }
在方法调用后,x的值还是为0,下面我们就具体看看执行的过程。
-
x被初始化为一个num的拷贝值(也就是0)。
-
x进行运算,变为3,但是num仍是10。
-
这个方法结束后,参数变量
当然,方法参数共有两种类型:
-
基本数据类型
-
对象引用
目前来说,一个方法不能修改一个基本数据类型的参数。而对象引用作为参数就不同了,可以很容易下面的方法实现num增加3的操作。
public class Test { public int num; public static void main(String[] args) { Test harry = new Test(); harry.num=10; harry.add(harry); System.out.println(harry.num); } public void add(Test x) { x.raiseNum(); } public void raiseNum() { int result = num*3; num = result; } }
具体的步骤为下:
-
x被初始化为harry值的拷贝值,这里是一个对象的引用。
-
raiseNum方法运用于这个对象的引用,x和harry同时引向的Test(图中的Employee)对象的num进行了乘3的操作
-
方法结束后,参数变量x不再使用。不过,对象变量的harry将继续引用那个num乘3的Test对象。
总结
-
一个方法不能修改一个基本数据类型的参数(四类八种)。
-
一个方法可以改变一个对象参数的状态。(状态即是对象的成员变量)。
-
一个方法不能让对象参数引用一个新的对象。(容易混淆,初学者只需要牢记java是值传递) 。
第三点如果需要深究,建议看下《Java核心技术卷1》
参考文档:《Java核心技术卷1》