zoukankan      html  css  js  c++  java
  • Java关于整型类缓存[-128,127]之间的数字

    我们在学习Java的包装类Integer、Long的时候可能会遇到这个问题:


    Integer a = 500;
    // Integer a = Integer.valueOf(500); 等价于上面的 Integer b = 500; System.out.println(a == b); // false

    ② Integer c = 100; Integer d = 100; System.out.println(c == d); // true

     

    ① 这种情况其实很好理解,因为 Integer是个类,所以创建a对象的时候会在堆中开辟一块空间,创建b对象的时候也会开辟一块空间,所以很显然他们的内存地址是不相等的,所以a != b。

    ② 那么很多人就会觉得很奇怪,既然都说了他们的内存地址不同,那么第二种情况为什么会相等呢,其实是Java在程序启动的时候就已经缓存了[-128,127]之间的整数。

    我们可以看一下valueOf的源码

     其中IntegerCache.low = -128,IntegerCache.high = 127。

    至于Cache数组是什么呢,它其实是在程序启动的时候就创建好的一个范围在[-128, 127]之间的数组。

    所以当我们调用valueOf的时候,首先会检查是否在[-128, 127]之间,如果在这个区间内就直接从缓存数组中拿出已经缓存好的对象,如果不在这个区间内,那么就创建新的类型。

  • 相关阅读:
    Git 的使用
    state介绍
    salt之pillar组件
    salt之grains组件
    python之commands模块
    install命令
    salt常用模块及API
    locate包的安装
    集中化管理平台Saltstack安装配置
    系统批量运维管理器pexpect的使用
  • 原文地址:https://www.cnblogs.com/z1014601153/p/12834641.html
Copyright © 2011-2022 走看看