当前位置: 移动技术网 > IT编程>开发语言>Java > Integer Cache(带你脱坑)

Integer Cache(带你脱坑)

2019年06月07日  | 移动技术网IT编程  | 我要评论

法律英语翻译,圣博梦想岛,nlb

integer cache

废话不多说----->直接上代码:

public class integerdemo {
    public static void main(string[] args) {
        integer numa = 127;
        integer numb = 127;
​
        integer numc = 128;
        integer numd = 128;
​
        system.out.println("numa == numb : "+ (numa == numb));
        system.out.println("numc == numd : "+ (numc == numd));
    }
}

结果:

numa == numb : true
numc == numd : false

      what?这个输出结果怎么跟以往的认知有所出入呢?在我们的代码“integer numa = 127”中,编译器会把基本数据的“自动装箱”(autoboxing)成包装类,所以这行代码就等价于“integer numa = integer.valueof(127)”了,这样我们就可以进入valueof方法查看它的实现原理。

 integer类的源码
  
  private static class integercache {
        static final int low = -128;
        static final int high = 127;
        static final integer cache[];
  ......
  }
  
  public static integer valueof(int i) {
        if (i >= integercache.low && i <= integercache.high)
            return integercache.cache[i + (-integercache.low)];
        return new integer(i);
 }

 

从上面的源码可以看到,valueof方法会先判断传进来的参数是否在integercache的low与high之间,如果是的话就返回cache数组里面的缓存值,不是的话就new integer(i)返回。

----------------------------------------------------------------------------------------------------------------------------------------

那我们再往上看一下integercache,它是integer的内部静态类,low默认是-128,high的值默认127,但是high可以通过jvm启动参数xx:autoboxcachemax=size来修改(如图),如果我们按照这样修改了,然后再次执行上面代码,这时候2次输出都是true,因为缓存的区间变成-128~200了。

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网