《疯狂Java讲义精粹》读书笔记5 ------ 一个奇怪的问题

------------《疯狂Java讲义精粹》读书笔记5--------------

先猜一猜下面的代码会输出什么吧:

 1 /**
 2  * 一个奇怪的问题
 3  * @author 《疯狂的Java讲义》
 4  * @date 3/6/2013
 5  */
 6 public class AStrangeJavaAnswer {
 7     public static void main(String[] args) {
 8         Integer inA = 5;
 9         Integer inB = 5;
10         System.out.println("inA == inB: " + (inA==inB));
11         
12         Integer inC = 128;
13         Integer inD = 128;
14         System.out.println("inC == inD: " + (inC==inD));
15     }
16 }

输出结果:

inA == inB: true
inC == inD: false


    什么!没搞错吧~~~ 怎么不是输出两个true? 时尚这与Java的Integer类的设计有关,查看java.lang.Integer类的源代码:

  系统把-128~127之间的数自动装箱成Integer实例,并放入一个cache的数组之中。如果把一个-128~127之间的数自动装箱成Integer实例时实际上直接指向对应的数组元素,因此,这个范围之外的数就要重新创建一个Integer对象了。因此输出的结果是不同。

 

posted @ 2013-03-06 02:14  Cocoon  阅读(225)  评论(0编辑  收藏  举报