java integer和int的问题
今天遇到这样一个问题
1 楼 angkorpeach 2012-01-28 咋不能显示全图,点击图片看吧。这个问题不是我本人发现的,是我同学,我同学最后找到的答案如下:Integer 与Short包装类对象,其值如果在-127到+128之间 用“==”运算符会返回true 但是不知道为什么。而且只限于Short型和Integer型,Float Long等就直接全false了 。期待完美解释 2 楼 xiaoyu1985ban 2012-01-30 很显然,在自动装箱时对于值从128到127之间的值,它们被装箱为Integer对象后,对象在内存中被重用,所以使用==进行比较时,实际上参考至同一个对象。我推断,自动装箱的底层实现实际上是调用了Integer.valueOf(int n)方法,也就是说。形如“Integer a = 100;”的自动装箱的语句等价于Integer a = Integer.valueOf(100);
然后看了一下JDK中相关的源码,发现在valueOf方法的实现中,对于128到127的值,是从缓存中获取的(IntegerCache),而不是new出来的。