Java:将值传递给方法的方式
各种程序设计语言中方法传递方式有如下几种:
- 按值调用 call by value
- 按引用调用 call by reference
- 按名称调用 call by name
Java 中是按值调用。方法参数一般有两种类型:
- 基本数据类型(数字、布尔值)
- 对象引用
基本数据类型是按值调用这个很好理解,例如下面的方法
public static void tripleValue(double x) { x = 3 * x; }
接着调用上面的方法
double percent = 10; tripleValue(percent);
可以看到,调用这个方法后 percent 的值该是 10,在调用方法时 x 被初始化为 percent 值的一个拷贝,也就是 10。方法中改变的也只是 x 的值而已。
对象引用类型,方法的参数被初始化为引用对象的地址值。例如下面的方法。
public static void swap(Employee x, Employee y) { Employee temp = x; x = y; y = temp; }
接着调用上面的方法
Employee a = new Employee("Alice", 70000); Employee b = new Employee("Bob", 60000); swap(a, b);
调用方法后 a 和 b 的引用对象并没有发生改变,a 仍然是 Alice,b 仍然是 Bob。究其原因,调用方法时,x 被初始化为 a 指向对象的地址值,执行方法后,只是改变了 x 的指向对象,并没有改变 a 的指向对象。换而言之,一个方法不能让对象参数引用一个新的对象。但是一个方法可以改变一个对象参数的状态。