1.Java程序设计语言总是按值调用(特别的,方法不能修改传递给它的任何参数变量的内容),而不是像C++语言一样可以按引用调用。
For example:
首先编写一个交换两个雇员对象的方法:
public static void swap(Employee x,Employee y)
{
Employee temp = x;
x = y;
y = temp;
x = temp;
}
Employee a = new Employee("Alice"...);
Employee b = new Employee("Bob"...);
swap(a,b) //调用方法
//Now x refers to Bob,y to Alice
但是,方法并没有改变存储在变量a和b中的对象引用。swap方法的参数x和y被初始化为两个对象引用的拷贝,最终,在方法结束时参数变量x和y被丢弃了,原来的变量a和b仍然引用这个方法调用之前所引用的对象。
2.一个方法不能修改一个基本数据类型的的参数(即数值型或布尔型)。
3.一个方法可以改变一个对象参数的状态。
For example:
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倍的雇员对象
4.一个方法不能让对象参数引用一个新的对象。