方法参数
方法得到的都是所有参数值的拷贝,方法不能修改传递给它的任何参数变量的内容。
参数共有两种类型:
- 基本数据类型
- 对象引用
除了基本数据类型的都是对象引用,包括数组等等。
很容易得知,一个方法不可能改变一个基本数据类型的参数,下面讨论参数的对象的情况。
下面这个方法可以将一个雇员的薪金提高两倍
public static void tripleSalary(Employee x){ x.raiseSalary(200);}
当调用
harry = new Employee(...);tripleSalary(harry);
时,执行过程如下:
- x被初始化为harry值的拷贝,x是对象的引用。x和harry同时指向相同的对象。
- raiseSalary方法应用于这个对象引用。x和harry同时引用的那个Employee对象的薪金提高了200%。
- 方法结束之后,x不再使用。harry继续引用那个增长了薪金的对象
Java中都是值传递,而不是引用传递
下面这个方法用来交换两个雇员对象(其实做不到):
public static void swap(Employee x, Emploee y)//doesn't work{ Employee temp = x; x = y; y = temp;}
如果Java对对象采用的是按引用(地址)调用那么这个方法可以实现两个对象交换数据的效果。
Employee a = new Employee("Alice",...);Employee b = new Employee("Bob",...);swap(a,b);
但是执行完该方法后,a和b所引用的对象并没有改变。x和y在方法执行过程中所引用的对象改变了,但是a和b引用的对象并没有改变,因为x和y只是“复制品”。
这个过程说明,对象引用也是按值传递的。