《疯狂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对象了。因此输出的结果是不同。