最近在看《java核心技术卷1》,看到4.5章节的时候解决了以前一直有些疑惑的问题。
记录如下:
首先,在程序设计语言中,将参数传递给方法(或函数)的术语有:
按值调用(call by value)表示方法接收的是调用者提供的值。
按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。
书中还提到了Algol的按名称调用。
在java中:
java程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。
例如,考虑代码:
double percent = 10;
harry.raiseSalary(persent);
暂且不用管这段代码的具体实现,书中这个章节用了雇员类来解释很多事情,我们现在只要知道这种调用的方式并不能让percent的值进行改变就可以了。
以上是一个简单的例子,说明了java参数传递的方式。下面将从参数为基本数据类型和对象引用两种情况进行分析:
方法参数为基本数据类型:
public static void tripleValue(double x)
{
x = 3 * x;
}
然后调用:
double percent = 10.0;
tripleValue(percent);
调用之后,percent的值还是10.0,并没有什么变化。
下面看一下具体的执行的过程:
1.x被初始化为percent值的一个拷贝,也还是10。
2.x被乘以了3,然后x变成了30,但是percent仍然是10,因为毕竟是对x的操作,并没有改变percent。
3.方法结束之后,x被弃用了,结果percent还是10。