A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

很多程序设计语言(特别是C++)提供了两种参数传递的方式:值调用和引用调用。有些程序员认为java采用的是引用调用,实际上这是错误的。我们可以给出一个反例来详细地阐述一下这个问题。
首先,编写一个雇员类Employee:
  1. class Employee
  2. {
  3.         private String name;
  4.         public Employee(String name)
  5.         {
  6.                 this.name = name;
  7.         }
  8.        
  9.         public String getName()
  10.         {
  11.                 return name;
  12.         }

  13.         public void setName(String name)
  14.         {
  15.                 this.name = name;
  16.         }

  17.        
复制代码
然后,编写一个交换雇员对象的方法:
  1. public static void swap(Employee x,Employee y)
  2.         {
  3.                 Employee temp = x;
  4.                 x = y;
  5.                 y = temp;
  6.         }
复制代码
如果java程序设计语言对对象采用的是引用调用,那么这个方法就应该能够实现交换数据的效果:
  1. Employee a = new Employee("Alice");
  2.                 Employee b = new Employee("Bob");
  3.                 swap(a,b);
复制代码
但是,方法并没有改变存储在变量a和b中的对象的引用。swap方法的参数x和y被初始化为两个对象的拷贝,这个方法交换的是这两个拷贝。最终,白费力气。在方法结束时参数变量x和y被抛弃了。原来的变量a和b任然引用这个方法调用前所引用的对象。      这个过程说明:java程序设计语言对对象采用的不是引用调用,实际上,对象引用进行的是值传递。







1.PNG (92.17 KB, 下载次数: 2)

swap

swap

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马