方法参数

Java 程序设计语言总是采用按值调用。

方法得到的是所有参数值的一个拷 贝,

特别是, 方法不能修改传递给它的任何参数变量的内容。

 

方法参数共有两种类型:

•基本数据类型 (数字、 布尔值 K

•对象引用。

一个方法不可能修改一个基

本数据类型的参数。 而对象引用作为参数就不同了, 可以很容易地利用下面这个方法实现将 一个雇员的薪金提高两倍的操作:

public static void tripieSalary(Employee x) // works

{

x.raiseSa1ary(200) ; }

当调用

harry = new Employee(. . .); tri pi eSal ary(harry) ;

时, 具体的执行过程为:

1 ) X 被初始化为 harry 值的拷贝, 这里是一个对象的引用。

 

2 ) raiseSalary 方法应用于这个对象引用。 x 和 harry 同时引用的那个 Employee 对象的薪

金提高了 200%。
3 ) 方法结束后, 参数变量 x 不再使用。 当然, 对象变量 harry 继续引用那个薪金增至 3

倍的雇员对象

 

 

实现一个改变对象参数状态的方法并不是一件难事。 理由很简单, 方法 得到的是对象引用的拷贝, 对象引用及其他的拷贝同时引用同一个对象。

很多程序设计语言(特别是, C++ 和 Pascal) 提供了两种参数传递的方式: 值调用和引 用调用。 有些程序员 (甚至本书的作者)认为 Java 程序设计语言对对象采用的是引用调用, 实际上, 这种理解是不对的。 由于这种误解具有一定的普遍性, 所以下面给出一个反例来详 细地阐述一下这个问题。

public static void swap(Employee x, Employee 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);
// does a now refer to Bob, b to Alice?

是, 方法并没有改变存储在变量 a 和 b 中的对象引用。

swap 方法的参数 x 和 y 被初始 化为两个对象引用的拷贝, 这个方法交换的是这两个拷贝。

// x refers to Alice, y to Bob Employee temp = x;
x = y;
y = temp;

// now x refers to Bob, y to Alice

 

在方法结束时参数变量 X 和 y 被丢弃了。 原来的变量 a 和 b 仍然引用 这个方法调用之前所引用的对象 (如图 4-8 所示 )。

 

Java 程序设计语言对对象采用的不是引用调用

对象引用是按 值传递的。

下面总结一下 Java 中方法参数的使用情况:

•一个方法不能修改一个基本数据类型的参数 (即数值型或布尔型)。

•一个方法可以改变一个对象参数的状态。

•一个方法不能让对象参数引用一个新的对象。

 

C + + 有 值 调 用 和 引 用 调 用。 引 用 参 数 标 有 & 符 号。 例 如, 可 以 轻 松 地 实 现 void tripleValue(double& x) 方法或 void swap(Employee& x, Employee& y) 方法实现修改 它们的引用参数的目的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值