14K的小短腿

导航

Chapter3_操作符_别名机制

  Java中的别名机制实际体现的是对于“=”这一类赋值操作符的使用规则和内涵。“=”的实际内涵是指将右边的变量的值(对于基本数据类型而言)或者某一个对象的引用(对于某个具体对象而言)复制到左边的变量名所指定的存储区域内,虽然两者可能只有细微区别但还是需要仔细区分。

  例如在对基本数据类型进行赋值操作时,比如a=b,a和b都是基本数据类型,这种情况是非常简单的,因为a和b都只是一块存储了存储了数值的内存区域,而不是指向某个对象的引用,这时赋值的操作仅仅只是将b中的数值复制给a即可,从这个角度也可以理解为什么不能给常数赋值,因为常数是没有占据内存区域的。

  而在对具体对象的引用赋值时,情况会发生变化,有点类似于C语言中的指针。“对一个对象进行操作时,我们实际操作的是对象的引用”,所以将一个对象赋值给另一个对象,实际是将一个对象的引用复制给另一个对象,例如a和b起初指向的是同一个类的不同对象,那么经过操作a=b后,a和b指向的是同一个对象。

  下面是对别名机制的展示:

  定义了person类

1 public class Person {
2 	float height;
3 }

  主方法:

 1 public class Test {
 2     public static void main(String[] args){
 3         //成员变量的别名机制
 4         Person p1 = new Person();
 5         Person p2 = new Person();
 6         p1.height = 180;
 7         p2.height = 175;
 8         System.out.println(p1.height + "," + p2.height);
 9         p1 = p2;
10         System.out.println(p1.height + "," + p2.height);
11         p2.height = 185;
12         System.out.println(p1.height + "," + p2.height);
13     }
14 }

  输出:

 1 180.0,175.0 2 175.0,175.0 3 185.0,185.0 

  可以看到当执行了p1=p2后,p1和p2成员变量的值都改变了,这告诉我们一个事实:在对对象进行操作时,操作的实际是对象的引用,赋值后,两个引用实际上指向的是同一个对象,这就是java的别名机制。

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