Java编程语言使用调用的值。这意味着该方法得到所有参数值的副本。特别是,该方法不能修改任何参数变量的内容传递给它。(@more@)
为例,考虑以下电话:
双=10百分比; harry.raiseSalary ();
无论方法是如何实现的,我们知道,在方法调用之后,价值的百分比仍然是10。
让我们更加密切地关注这个情况。假设一个方法试图三重方法参数的值:
公共静态空tripleValue(双x)//是行不通的 { x=3 *; }
让我们调用这个方法:
双=10百分比; tripleValue(百分比);
然而,这并不工作。方法调用之后,价值的百分比仍然是10。这是发生了什么:
- <李>
x初始化复制的价值的百分比(即10)。李李
> <>x是只是现在是30。但百分比仍10(见图4 - 6)。
<中心> <编辑类=" docFigureTitle ">图4 - 6。修改数值参数没有持久的影响一直编辑>中心> 李> <李>
方法结束时,参数变量x是不再使用。
李>,然而,两种方法参数:
- <李>
原始类型(数字、布尔值)
李> <李>对象引用
李>你见过一个方法,这是不可能改变一个原始类型参数。参数的情况是不同的对象。你可以很容易地实现一个三元组员工的工资的方法:
公共静态空tripleSalary(员工x)//工作 { x.raiseSalary (200); }
当你叫
<>之前哈利=新员工(。); tripleSalary(哈利);然后以下情况:
- <李>
x初始化一份哈利的价值,也就是说,一个对象引用。李李
> <>raiseSalary方法应用于对象引用。Employee对象x和哈利把工资提高200%。李李
> <>方法结束时,参数变量x是不再使用。当然,哈利继续对象变量引用的对象工资的三倍(见图4 - 7)。
<中心> <编辑类=" docFigureTitle ">图4 - 7。修改一个对象参数有一个持久的影响一直编辑>中心> 李>
如您所见,它是容易可能实际上非常常见实现方法,改变对象的状态参数。原因很简单。方法对象引用的一个副本,原件和复印件是指同一个对象。
许多编程语言(特别是c++和帕斯卡)有两个参数传递的方法:调用的值和引用调用。一些程序员(甚至不幸的是一些书的作者)声称,Java编程语言使用引用调用对象。然而,这是错误的。因为这是一个常见的误解,这是值得研究的一个反例。
让我们试着编写一个方法,交换两个员工对象:
公共静态空间交换(员工x,员工y)//是行不通的 { 员工临时=x; x=y; y=temp; }
如果使用Java编程语言为对象引用调用,该方法将工作:
<>前员工=新员工(“爱丽丝”。); 员工b=新员工(“Bob”。); 交换(a, b);//一个现在指的是鲍勃,爱丽丝?然而,该方法实际上并没有改变对象引用存储在变量a和b。的x和y参数交换方法初始化这些引用。然后继续交换这些副本的方法。
//x指的是爱丽丝,y鲍勃 员工临时=x; x=y; y=temp;//现在x指鲍勃,y爱丽丝
但归根结底,这是一个浪费精力。该方法结束时,参数变量x和y是废弃的。原始变量a和b仍然引用同一个对象方法调用之前一样(见图4 - 8)。
<中心> <编辑类=" docFigureTitle ">图4 - 8。null