你知道整数型常量池吗?

见图点题:

这。。。是不是感觉学了假的Java,太懵逼了吧。
  首先我们要清楚的一点就是,图片上的这个问题本身想要表达的是什么意思呢?我们可以先来看看下面的代码:

public class IntegerTest {

    public static void main(String[] args) {
        int a = 1000;
        int b = 1000;
        int i = 100;
        int j = 100;
        System.out.println(a==b);
        System.out.println(i==j);
    }

}

  很明显在这种情况下了,我们比较的结果都是true。接着我们再试着使用包装类的形式来创建整型对象,代码如下:

public class IntegerTest {

    public static void main(String[] args) {
       Integer a,b;
       Integer i,j;
       a=1000;
       b=1000;
       i=100;
       j=100;
       System.out.println(a==b);
       System.out.println(i==j);
    }

}

运行结果如图所示:

  这和我们想象的结果不一致。。。到底是什么原因导致的呢?接着我就又写了一段代码尝试了一下:(PS:其实是我自己查阅了资料之后。。。)

public class IntegerTest{

    public static void main(String[] args) {
       Integer a,b;
       for(int i=-129;i<=128;i++){
           a = i;
           b = i;
            System.out.println(i+":"+ (a==b));
        }
    }

}

结果如图所示:


  我们可以看到,在数据-128~127这个区间内的整数比较的值都是相等的,同时呢, == 操作比较的是两个对象的内存地址,而并不是对象本身的值,由此可见,数据-128~127是存储在同一块内存单元的,其实也就是一个字节的存储单元,在查阅了相关资料之后,我了解到整数型常量池这个概念,也就是说区间的这256个整数是存在这样的一个内存单元当中的,并且这个单元是和字符串一样都处在Java虚拟机的代码区,也就是说,如果我们的代码当中出现了Integer类对象的话,程序在进行Integer类加载的时候会初始化整数型常量池,也即其中的256个类对象。
  对于Java语言当中为什么要使用这样的一个机制呢,我们可以从缓存的方面来说明这一点,不难发现,这256个整数型数据是我们在开发当中用的最频繁的,因此选择了把这些数据存放在整数型常量池当中,从而提高了我们的程序执行的效率,这也是缓存的优点,那么其中的缺点就是耗费内存,就是我们常说的用空间来换取时间效率。请着重看下图来了解其中的关系:


以上内容均为个人学习的一点心得,其中的知识点若有错误请留言提醒,若有侵权内容提醒马上删除。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值