Integer 缓存

  • 整数区间 -128 到 +127。最大值 127 可以通过 JVM 的启动参数 -XX:AutoBoxCacheMax=size 修改。
  • 这种缓存行为不仅适用于Integer对象。我们针对所有整数类型的类都有类似的缓存机制。
  • 有 ByteCache 用于缓存 Byte 对象
  • 有 ShortCache 用于缓存 Short 对象
  • 有 LongCache 用于缓存 Long 对象
  • 有 CharacterCache 用于缓存 Character 对象
  • Byte,Short,Long 有固定范围: -128 到 127。对于 Character, 范围是 0 到 127。除了 Integer 可以通过参数改变范围外,其它的都不行。

实现机制

内部类IntegerCache 预先存储静态数组,-128-127的对象数组:cache[]; 判断value值在范围内则使用缓存值。

DEMO

Integer integer3 = 300;
    Integer integer4 = 300;

    if (integer3 == integer4)
        System.out.println("integer3 == integer4");
    else
        System.out.println("integer3 != integer4");
    System.out.println("integer3:"+integer3+" integer4:"+integer4);

    Integer integer5 = 3;
    Integer integer6 = 3;
    System.out.println("integer5:"+integer5+" integer6:"+integer6);
    if (integer5 == integer6)
        System.out.println("integer5 == integer6");
    else
        System.out.println("integer5 != integer6");