关于java中方法参数的摘录

之前一直没有理解的java参数传递终于在今天告一段落,一直以为java中除了引用还是引用,至于后来遇到引用之间的交换,就认为是两个对象之间的交换,后来才知道这种根深蒂固的理解竟然打错特错。看了《java核心技术 卷一:基础篇》之后才理解了java之间参数的调用是值调用。现将相关知识摘录如下:

1.相关概念的理解:
 值调用:表示方法接收的是调用者提供的值。
 引用调用:表示方法接收的是调用者提供的变量地址。
2.结论:
 java程序设计语言总是采用值调用。也就是说,方法得到的是所有参数值的一个拷贝,特
 别是,方法不能修改传递给它的任何参数变量的内容。

 例如,考虑下面的调用:
  double percent = 10;
  harry.raiseSalary(percent);

  在方法调用之后,percent的值还是10
  public static void tripleValue(double x) {//doesn't work
   x = 3 * x;
  }
  具体执行过程:
  1) x被初始化为percent值的一个拷贝(也就是10)
  2) x被乘以3后等于30.但是percent仍然是10
  3) 这个方法结束后,参数变量x不再使用


 方法参数共有两种类型:
 ▪基本数据类型(数字、布尔值)
 ▪对象引用

 一个方法不可能修改一个基本数据类型的参数。而对象引用作为参数就不同了,可以很容易利用下面
 这个方法实现将一个雇员的薪金提高两倍的操作:
   public static void tripleSalary(Employee x)  {//works
   x.raiseSalary(200);
   }
   当调用
   harry = new Employee(...);
   tripleSalary(harry);
   具体执行过程:
   1) x被初始化为harry值的拷贝,这里是一个对象的引用
   2) raiseSalary方法应用于这个对象的引用。x和harry同时引用的那个Employee对象的薪金提高了200%
   3) 方法结束后,参数变量x不再使用。当然,对象变量harry继续引用那个薪金增至3倍的雇员对象

 可以绘制图形如下:

 

 误区: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);
  但是,方法并没有改变存储在变量a和b中的对象引用。swap方法的参数x和y被初始化为两个
  对象引用的拷贝,这个方法交换的是这两个拷贝。
  // x refers to Alice, y to Bob
  Employ temp = x;
  x = y;
  y = temp;
  //now x refers to Bob, y to Alice
  最终白费力气,在方法结束时参数变量x和y被丢弃了。原来的变量a和b仍然引用这个方法调用
  之前所引用的对象。

可以绘制图形如下:


  从上图可以看出,其操作之间只是在x和y之间变动,在方法调用完成之后就会被抛弃,而a,b的的指向对象是不会改变的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值