Java_装箱,拆箱

public static void main(String[] args){
        Integer i1 = 127;
        Integer i2 = 127;
        Integer i3 = 128;
        Integer i4 = 128;

        System.out.println(i1 == i2);
        System.out.println(i3 == i4);

        Double d1 = 127.0;
        Double d2 = 127.0;
        Double d3 = 128.0;
        Double d4 = 128.0;

        System.out.println(d1 == d2);
        System.out.println(d3 == d4);
}

结果是

true
false
false
false

产生这样的结果的原因是:Byte、Short、Integer、Long、Char这几个装箱类的valueOf()方法是以128位分界线做了缓存的,假如是[-128,127]区间的值是会取缓存里面的引用的,以Integer为例,其valueOf(int i)的源代码为:

static final int low = -128;

static final int high=127;

public static Integer valueOf(int i) {

    if (i >= IntegerCache.low && i <= IntegerCache.high)

        return IntegerCache.cache[i + (-IntegerCache.low)];

    return new Integer(i);

}

而Float、Double不会的原因也很简单,因为byte、Short、integer、long、char在某个范围内的整数个数是有限的,但是float、double这两个浮点数却不是。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容