Java 程序设计语言总是采用按值调用。
也就是说, 方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。
然而,方法参数共有两种类型:
•基本数据类型(数字、布尔值K)
public static void tripieValue(double x) // doesn't work
{
x = 3 *x;
}
•对象引用
一个方法不可能修改一个基本数据类型的参数。而对象引用作为参数就不同了。
public static void tri pi eSal ary (Employee x) // works
{
x.raiseSa1ary(200);
}
harry = new Employee(. . .);
tripieSal ary(harry);
实现一个改变对象参数状态的方法并不是一件难事。理由很简单, 方法
得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象
java其实是按值调用的。
首先,编写一个交换两个雇员对象的方法
public static void swap(Employee x , Employee y) // doesn't work
Employee temp = x;
x = y;
y = temp;
}
如果 Java 对对象采用的是按引用调用,那么这个方法就应该能够实现交换
数据的效果。但是,方法并没有改变存储在变量 a 和 b 中的对象引用。
swap 方法的参数 x 和 y 被初始化为两个对象引用的拷贝,这个方法交换的
是这两个拷贝最终,白费力气。在方法结束时参数变量 X 和 y 被丢弃了。原
来的变量 a 和 b 仍然引用这个方法调用之前所引用的对象
这个过程说明:Java 程序设计语言对对象采用的不是引用调用,实际上, 对象引用是按值传递的。
下面总结一下 Java 中方法参数的使用情况:
•一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
•一个方法可以改变一个对象参数的状态。
•一个方法不能让对象参数引用一个新的对象
-----------------------参考java核心卷一--------------------------