14K的小短腿

导航

Chapter3_操作符_方法调用中的别名问题

  接下来展示方法调用中的别名问题,方法调用中的别名问题指的是,将一个对对象的引用传递给某一个方法时,方法操作的是这一个特定的引用而不是这个引用的拷贝。

 1 class Person{
 2     float height;
 3 }
 4 
 5 public class Test {
 6     //方法调用的别名机制
 7     static void grow1(float height){
 8         height += 1;
 9     }
10     
11     static void grow2(Person p){
12         p.height += 1;
13     }
14     
15     public static void main(String[] args){
16         Person p = new Person();
17         p.height = 180;
18         System.out.println(p.height);
19         grow1(p.height);
20         System.out.println(p.height);
21         grow2(p);
22         System.out.println(p.height);
23         
24     }
25 }

  输出:

180.0
180.0
181.0

  从输出可以看出,grow1方法的原型定义为static void grow1(float height),传递的值是一个整型变量,操作的是传进来的值的拷贝(因为是基本数据类型,这一点和C等一致),对象的引用并没有被使用到。而grow2方法的原型定义为static void grow2(Person p),传递的值是一个对象的引用,这种情况下方法会直接对这个对象进行操作,所以我们看到这个对象的成员变量改变了。

posted on 2017-07-08 22:27  14K的小短腿  阅读(107)  评论(0)    收藏  举报