我们在学习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]之间,如果在这个区间内就直接从缓存数组中拿出已经缓存好的对象,如果不在这个区间内,那么就创建新的类型。

Java关于整型类缓存[-128,127]之间的数字的更多相关文章

  1. 深入理解Java的整型类型:如何实现2+2=5?

    先看下这段神奇的Java代码: public static void main(String[] args) throws Exception { doSomethingMagic(); System ...

  2. JAVA 长整型转换为IP地址的方法

    JAVA 长整型转换为IP地址的方法 代码例如以下: /** * 整型解析为IP地址 * @param num * @return */ public static String int2iP(Lon ...

  3. (转)JAVA的整型与字符串相互转换

    JAVA的整型与字符串相互转换1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或         ...

  4. JAVA中整型的存储和左右移位运算

    byte,1个字节8位, -128 ~ 127之间,首位表示正负,0为正,1为负,0111,1111表示127,-127为127取反1000,0000,再加1,即1000,0001为-127,-127 ...

  5. 【java】线程安全的整型类AtomicInteger

    一.遇见AtomicInteger 在看项目代码的时候看到这个类,发现其功能很简单,就是一个整型变量的类型,出于好奇看了其类定义. 该类位于java.util.concurrent.atomic下,在 ...

  6. java jdk缓存-128~127的Long与Integer

    先推断下以下代码的输出结果 Qa:----------------------------------------------           Long a = Long.valueOf(127) ...

  7. java中大整型BigInteger及setBit和testBit方法

    最近在修改公司之前的项目,在项目中遇到了权限校验的问题,代码中出现了BigInteger的setBit()testBit()方法,之前未接触过,所以了解了下BigInteger. 在Java中,由CP ...

  8. 整型数组与vector对象之间的相互初始化

    #include<iostream> #include<vector> #include<string> using namespace std; int main ...

  9. JAVA的整型与字符串相互转换

    1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([S ...

随机推荐

  1. Linux 驱动框架---设备文件devfs

    设备文件系统 Linux引入了虚拟文件系统,从而使设备的访问可以像访问普通文件系统一样.因此在内核中描述打开文件的数据inode中的rdev成员用来记录设备文件对应到的设备号.设备文件也由一个对应的f ...

  2. js code review

    js code review https://codereview.stackexchange.com/ refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只 ...

  3. ECMAScript 7 (ES 2016 /ES7 ) Ecma-262 7Edition

    Standard ECMA-262 ECMAScript 2016 Language Specification 7th edition (June 2016) http://www.ecma-int ...

  4. whiteboard & coding interview practice

    whiteboard & coding interview practice 白板 & 面试 & 编码练习 Algorithm https://www.freecodecamp ...

  5. HTML Custom Elements (v1)

    HTML Custom Elements (v1) https://developers.google.com/web/fundamentals/web-components/customelemen ...

  6. AMP ⚡️原理

    AMP ️原理 AMP 是如何运作的 https://amp.dev/zh_cn/about/how-amp-works/ AMP 瞬时加载 结合了以下优化是 AMP 页面速度之快以至于它们可以瞬时加 ...

  7. git include只包含某些文件

    .gitignore: * # include !.gitignore !a.txt !dir2

  8. 百度 Apollo无人车平台增加传感器

    https://github.com/ApolloAuto/apollo/issues/1649 如果想加入一个新的传感器不是百度官方推荐的传感器到Apollo平台做法: First you can ...

  9. 面试20家互联网公司总结出的高频MySQL面试题

    1.MyISAM存储获与InnoDB存储引擎  MyISAM存储引擎不支持事务.表锁设计.支持全文索引.缓冲池只缓存索引文件,并不缓存数据文件. InnoDB存储引擎支持事务.行锁设计.支持外键,支持 ...

  10. 1063 Set Similarity——PAT甲级

    1063 Set Similarity Given two sets of integers, the similarity of the sets is defined to be Nc/Nt*10 ...