黑马程序员技术交流社区

标题: java对对象采用的是引用调用的验证 [打印本页]

作者: Demomiku    时间: 2015-5-5 15:49
标题: java对对象采用的是引用调用的验证
很多程序设计语言(特别是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





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2