java函数的参数传递

  

Java编程语言使用调用的值。这意味着该方法得到所有参数值的副本。特别是,该方法不能修改任何参数变量的内容传递给它。(@more@)

为例,考虑以下电话:

双=10百分比;
  harry.raiseSalary ();
  

无论方法是如何实现的,我们知道,在方法调用之后,价值的百分比仍然是10。

让我们更加密切地关注这个情况。假设一个方法试图三重方法参数的值:

公共静态空tripleValue(双x)//是行不通的
  {
  x=3 *;
  }
  

让我们调用这个方法:

双=10百分比;
  tripleValue(百分比);
  

然而,这并不工作。方法调用之后,价值的百分比仍然是10。这是发生了什么:

<李>

x初始化复制的价值的百分比(即10)。李李

<>

x是只是现在是30。但百分比仍10(见图4 - 6)。

<中心> <编辑类=" docFigureTitle ">图4 - 6。修改数值参数没有持久的影响一直编辑

癹ava函数的参数传递"

<李>

方法结束时,参数变量x是不再使用。

,然而,两种方法参数:

    <李>

    原始类型(数字、布尔值)

    <李>

    对象引用

你见过一个方法,这是不可能改变一个原始类型参数。参数的情况是不同的对象。你可以很容易地实现一个三元组员工的工资的方法:

公共静态空tripleSalary(员工x)//工作
  {
  x.raiseSalary (200);
  }
  

当你叫

<>之前哈利=新员工(。);   tripleSalary(哈利);   

然后以下情况:

<李>

x初始化一份哈利的价值,也就是说,一个对象引用。李李

<>

raiseSalary方法应用于对象引用。Employee对象x和哈利把工资提高200%。李李

<>

方法结束时,参数变量x是不再使用。当然,哈利继续对象变量引用的对象工资的三倍(见图4 - 7)。

<中心> <编辑类=" docFigureTitle ">图4 - 7。修改一个对象参数有一个持久的影响一直编辑

癹ava函数的参数传递"

如您所见,它是容易可能实际上非常常见实现方法,改变对象的状态参数。原因很简单。方法对象引用的一个副本,原件和复印件是指同一个对象。

许多编程语言(特别是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

java函数的参数传递