本帖最后由 猎鹰tianya 于 2014-1-7 14:27 编辑
这个问题,我今天已经纠结了一天了,也是刚弄懂!在Integer里有个内部类IntegerCache,会对【-128到127】的Integer对象进行缓存,这个你看Integer源码就能知道了!
我的解释是这样的:
Integer num1=12;// 这里用到了传说中的自动装箱, 这个动作会创建一个一个Integer对象并将地址覆盖num1,由于这个值在【-128到127】范 围内,所以会对这个对象进行缓存
Integer num2=12;
// 这个值得范围也在【-128到127】,这时,不会先创建一个对象,而是先去缓冲区找了,要是没找到才创建新的,要是找到了,就直接一个指向就完了!也就是说,这里的num1和num2其实是指向一个对象的,这就不难解释为什么用==比较的时候 是true了,因为两个地址是同一个地址。
System.out.println(num1==num2); //true
Integer num3=129;//范围超过【-128到127】,不缓存,直接来一新对象
Integer num4=129;//范围超过【-128到127】,不缓存,直接来一新对象
|