zoukankan      html  css  js  c++  java
  • Integer的缓存机制

    不知你有没有遇到这样的代码,同样是自动装箱,前后结果却不一致。

     

    通过右侧的汇编指令(此处用的是IDEA 的 Bytecode Viewer查看,也可以通过 javap -v 命令得到) ,7-10行的4行代码都执行了 Integer.valueOf() 方法。

    通过查看 Integer 源码,发现当 i 也就是发生自动装箱的值在一定范围的时候,直接取的就是缓存里面的值,在范围之外才会重新 new 出一个新的 Integer 对象。

     查看 IntegerCache 源码,当第一次使用 IntegerCache 时就会初始化一个Integer数组用来缓存一组对象,这组对象默认表示从 -128到127范围的Integer对象,而且必定包含 -128到127,其上限可以通过 -XX:AutoBoxCacheMax=<size> 启动参数指定。

     这样再来看最初的代码就一目了然了,10 已经存在于缓存中,每次取出都是同一个对象,而128不在缓存中,每次都会重新 new 一个新的对象,所以第一个判断是 true,第二个判断是 false。

    /* 如有意见或建议,欢迎评论区留言;如发现代码有误,欢迎批评指正 */

  • 相关阅读:
    条件运算符 (?:)
    SVN地址修改
    dev -gridview隐藏子表标题
    继承与 Data Member(3)
    继承与 Data Member(2)
    继承与 Data Member(1)
    Data Member 的存取
    Data Member 的布局
    Data Member 的绑定
    对于 sizeof(class_name) 值的讨论(2)
  • 原文地址:https://www.cnblogs.com/laydown/p/13050371.html
Copyright © 2011-2022 走看看