在程序设计语言中有关将参数传递给方法的一些术语
按值调用(call by value):表示方法接收的是调用者的值
按引用调用(call by reference)表示方法接收的是调用者提供的变量地址
在Java语言中总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给他的任何参数变量的内容。
public static void tripeValue(double x){
x=3*x;
}
double percent =10;
tripleValue(percent);
调用完这个方法之后,percent 的值还是10。下面看下具体执行过程
1)x 被初始化为percent 值的一个拷贝(也就是10)
2)x被乘以3之后等于30.但是percent仍然是10
3)这个方法结束后 ,参数变量X不在使用。
方法参数共有两种类型
基本数据类型
对象引用
一个方法不可能修改一个基本数据类型参数。而对象引用作为参数就不同了
看一段代码
public static void tripleSalary(Employee x){
x.raiseSalary(200);
}
harry=new Employee(....);
tripleSalary(harry);
1)x被初始化为harry值的拷贝,这里是一个对象的引用
2)raiseSalary 方法应用于对这个对象引用。x和harry同时引用的哪个
Employee对象的薪金提高了200%
3)方法结束后,参数变量x不再使用,当然,对象变量harry继续引用那个薪金 增至3倍的对象。
如果交换两个对象
如下代码所示:
public static void swap(Employee x, Employee y)
{
Employee temp=x;
x=y;
y=temp;
}
Employee a=new Employee("Alice", ...);
Employee b=new Employee("Bob",...);
swap(a,b);
最终 a ,b 并没有完成交换,仍然各自指向 各自的对象
交换的只是 两个对象引用的拷贝。
最后总结:
一个方法不能修改一个基本数据类型参数
一个方法可以改变一个参数的状态
一个方法不能让对象参数引用一个新的对象