thinking in java test3.4练习(2)(3)别名机制
来源:互联网 发布:腾达路由器软件升级 编辑:程序博客网 时间:2024/05/18 00:04
题目:创建一个包含float域的类,并用这个类来展示别名机制。
别名机制是指多个引用指向同一个对象。
我们知道Java里操作对象一般是通过引用来完成的,而引用的指一般是所指向的对象的内存地址。比如有两个引用a1,a2,分别指向两个对象。此时进行a1 = a2操作,这个操作的结果是把a2的值赋给了a1,也就是a1之后也指向了a2。a1之前引用的对象将会在某个时刻被垃圾回收器自动清理。 这就是别名对象。
public class test3_2 { public static void main(String [] args) { Peopel xiaoMing = new Peopel(); Peopel xiaoHong = new Peopel(); xiaoMing.height = 2.10f; xiaoHong.height = 1.68f; System.out.println("xiaoMing : " + xiaoMing.height + " xiaoHong : " + xiaoHong.height); xiaoMing = xiaoHong; System.out.println("xiaoMing : " + xiaoMing.height + " xiaoHong : " + xiaoHong.height); xiaoMing.height = 1.96f;//此时操作的其实是xiaoHong的height System.out.println("xiaoMing : " + xiaoMing.height + " xiaoHong : " + xiaoHong.height); }}class Peopel { float height;}
控制台输出:
xiaoMing : 2.1 xiaoHong : 1.68
xiaoMing : 1.68 xiaoHong : 1.68
xiaoMing : 1.96 xiaoHong : 1.96
上述程序中最后xiaoMing也指向了xiaoHong,这种现象就是别名现象。如果我们原本只是想把xiaoHong的height值传给xiaoMing,那么应该这样做:
xiaoMing.height = xiaoHong.height;
这样才不会出错。
在编程时我们应该注意这个问题,这个问题一不注意,就会造成巨大隐患。
那是不是别名现象一定就是有害的,应该完全避免呢?
其实不是的,在方法调用中,别名现象其实有很打用处。
我们来看下面这个题目:创建一个包含一个float域的类,并用这个类来展示方法调用时的别名机制。
书上有相应例子代码,我们对着模仿一个。
public class test3_2 { public static void main(String [] args) { Peopel xiaoMing = new Peopel(); xiaoMing.height = 2.10f; System.out.println("xiaoMing" + xiaoMing.height); growUp(xiaoMing); System.out.println("xiaoMing" + xiaoMing.height); } static void growUp(Peopel p) { p.height = p.height + 0.10f; }}class Peopel { float height;}
这里看起来在静态方法growUp里操作的是p,其实因为别名机制,我们在方法调用时将xiaoMing的引用传递给了p,这里操作的其实是xiaoMing的height。
以上。
0 0
- thinking in java test3.4练习(2)(3)别名机制
- thinking in java test3.17练习(14)
- thinking in java test3.11练习(11)(12)(13)
- thinking in Java test3.1练习(1)print,println,printf
- thinking in java test3.10练习(10)按位运算
- thingking in Java test3.7练习(5)(6)
- thingking in java test3.8练习(8)(9)
- thingKing in Java test3.8练习(7)扔硬币
- thinking in java test5.1练习(1)(2)
- thinking in java test5.3练习(3)(4)(5)(6)(7)
- thinking in java test4.5练习(6)(7)
- thinking in java test练习(13)(14)
- Thinking in JAVA 习题练习
- THINKING IN java(实例练习)
- thinking in java test4.3练习(1)(2)(3)(4)(5)用三元操作符和按位操作来显示二进制
- 《Thinking In Java》笔记(4)
- 《Thinking In Java》笔记(3)
- Thinking in Java 读书笔记(2)
- js导出excel
- 浅析Java中的final关键字
- 乐视 幻兽交易
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- 设计模式之桥接模式(Bridge)
- thinking in java test3.4练习(2)(3)别名机制
- jQuery源码分析笔记-构造jQuery对象(三)
- Win7中64位有关于“应用程序无法正常启动0xc000007b”的问题解决
- tjut 4301
- Oracle游标
- 数值的整数次方
- ISO8583报文(一)
- HDU 5776 sum(抽屉原理)
- cf 619c 科学记数法1