很多程序设计语言(特别是C++)提供了两种参数传递的方式:值调用和引用调用。有些程序员认为java采用的是引用调用,实际上这是错误的。我们可以给出一个反例来详细地阐述一下这个问题。 首先,编写一个雇员类Employee: - class Employee
- {
- private String name;
- public Employee(String name)
- {
- this.name = name;
- }
-
- public String getName()
- {
- return name;
- }
- public void setName(String name)
- {
- this.name = name;
- }
-
复制代码然后,编写一个交换雇员对象的方法: - public static void swap(Employee x,Employee y)
- {
- Employee temp = x;
- x = y;
- y = temp;
- }
复制代码如果java程序设计语言对对象采用的是引用调用,那么这个方法就应该能够实现交换数据的效果: - Employee a = new Employee("Alice");
- Employee b = new Employee("Bob");
- swap(a,b);
复制代码但是,方法并没有改变存储在变量a和b中的对象的引用。swap方法的参数x和y被初始化为两个对象的拷贝,这个方法交换的是这两个拷贝。最终,白费力气。在方法结束时参数变量x和y被抛弃了。原来的变量a和b任然引用这个方法调用前所引用的对象。 这个过程说明:java程序设计语言对对象采用的不是引用调用,实际上,对象引用进行的是值传递。
|