Java之数据类型缓存机制

问题描述:

public class IntegerTest {

    public static void main(String[] args) {

        Integer a = 5;
        Integer b = 5;

        System.out.println("a==b:" + (a==b));

        Integer c = 200;
        Integer d = 200;

        System.out.println("c==d:" + (c==d));

        Integer e = new Integer(5);
        Integer f = new Integer(5);

        System.out.println("e==f:" + (e==f));

    }
}

输出结果:

a==b:true
c==d:false
e==f:false

说明:

JVM对Byte、Short、Integer、Long、Character进行了缓存,缓存范围为 -128 到 127(Character范围为 0 到 127)。因此 ‘a==b:true’,但是** ‘c==d:false’,e和f使用了new,对象是分配到堆内存中的,e==f判断的是地址是否相同,因此‘e==f:false’**

备注:

只有Integer可以指定缓存的范围(-XX:AutoBoxCacheMax=size设置上届,下界不能指定,只能为-128),其它类都不行。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容