美文网首页
浅析Integer常量池

浅析Integer常量池

作者: abc_wangyu | 来源:发表于2017-07-27 14:40 被阅读30次

基本代码如下:

运行结果:

JDK1.5之后,加入自动装箱和拆箱的新特性,Integer i1 = 127 ,就是典型的将int类型自动装箱成Integer。装箱和拆箱的过程可以通过Javap命令查看到。例如:

可以看到 Integer i1 = 127,编译之后其实的调用的Integer.valueOf()方法进行自动装箱。其源码如下:

看到这里就可以明白为什么Integer i = 127的时候,i1和i2是相等的(原因是里面有IntegerCache缓存,IntegerCache有个Integer数组的成员变量,缓存范围是-128,127),而当Integer i = 128的时候,i3和i4都是新new的对象,其内存地址肯定不同。

IntegerCache的源码:

通过其源码看出,我们还可以设置参数来调整IntegerCache中缓存数组的大小,使得i3 可以等于i4。如下:

PS:java中基本类型的包装类的大部分都实现了常量池技术,即Byte,Short,Integer,Long,Character,Boolean;两种浮点数类型的包装类Float,Double并没有实现常量池技术。

相关文章

  • 浅析Integer常量池

    基本代码如下: 运行结果: JDK1.5之后,加入自动装箱和拆箱的新特性,Integer i1 = 127 ,就是...

  • java基础类型、String类理解、版本对比、1.8新特性

    1、java基本数据类型及长度 2、jvm的常量池: JVM常量池浅析Java常量池理解与总结 Java中的常量池...

  • Integer Integer.valueOf和Integer.

    Integer Integer是int的包装类,在Integer中有个常量池类IntegerCache,在 In...

  • Java-基础-数据类型-常量池

    整数类型常量池范围:[-128, 127],Byte Short Integer Long Character 都...

  • Integer内部常量池实现详解

    在Integer类的内部有一个IntegerCache的内部类,这个就是Integer常量池实现的有关类。 ...

  • JVM常量池浅析

      需要说明的一点是,这篇文章是以《深入理解Java虚拟机》第二版这本书为基础的,这里假设大家已经了解了JVM的运...

  • 常量池

    在compile的时候,放东西进常量池。 对于Integer 范围在 -128 - 127 对于 String, ...

  • Java 8种基本类型包装类和String的常量池

    Byte,Short,Integer,Long 通过如下代码输出可以看出常量池数值范围为-128~127。 输出结...

  • 字符串常量池

    静态常量池,运行期常量池,字符串常量池 静态常量池 运行时常量池 字符串常量池 问题 结果: 验证new Stri...

  • java__常量池

    java的常量池分为两种型态:静态常量池和运行常量池 静态常量池: 即class文件中的常量池,这种常量池主要用于...

网友评论

      本文标题:浅析Integer常量池

      本文链接:https://www.haomeiwen.com/subject/hppzkxtx.html