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

Java关于整型类缓存[-128,127]之间的数字的更多相关文章
- 深入理解Java的整型类型:如何实现2+2=5?
先看下这段神奇的Java代码: public static void main(String[] args) throws Exception { doSomethingMagic(); System ...
- JAVA 长整型转换为IP地址的方法
JAVA 长整型转换为IP地址的方法 代码例如以下: /** * 整型解析为IP地址 * @param num * @return */ public static String int2iP(Lon ...
- (转)JAVA的整型与字符串相互转换
JAVA的整型与字符串相互转换1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 ...
- JAVA中整型的存储和左右移位运算
byte,1个字节8位, -128 ~ 127之间,首位表示正负,0为正,1为负,0111,1111表示127,-127为127取反1000,0000,再加1,即1000,0001为-127,-127 ...
- 【java】线程安全的整型类AtomicInteger
一.遇见AtomicInteger 在看项目代码的时候看到这个类,发现其功能很简单,就是一个整型变量的类型,出于好奇看了其类定义. 该类位于java.util.concurrent.atomic下,在 ...
- java jdk缓存-128~127的Long与Integer
先推断下以下代码的输出结果 Qa:---------------------------------------------- Long a = Long.valueOf(127) ...
- java中大整型BigInteger及setBit和testBit方法
最近在修改公司之前的项目,在项目中遇到了权限校验的问题,代码中出现了BigInteger的setBit()testBit()方法,之前未接触过,所以了解了下BigInteger. 在Java中,由CP ...
- 整型数组与vector对象之间的相互初始化
#include<iostream> #include<vector> #include<string> using namespace std; int main ...
- JAVA的整型与字符串相互转换
1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([S ...
随机推荐
- HDU 4866 Shooting(主席树)题解
题意:在一个射击游戏里面,游戏者可以选择地面上[1,X]的一个点射击,并且可以在这个点垂直向上射击最近的K个目标,每个目标有一个价值,价值等于它到地面的距离.游戏中有N个目标,每个目标从L覆盖到R,距 ...
- JavaScript中的对象引用和复制
在JavaScript分为两种原始值和引用值类型,原始值之间的复制是值对值得复制,而引用类型则是引用对引用的复制: // 原始值的复制: let num1 = 1; let num2 = num1; ...
- 设置chromium的默认搜索引擎为Bing
设置 -> 搜索 -> 管理搜索引擎 第三项中添加: http://cn.bing.com/search?q=%s 即可.
- div & drop
div & drop uplaod file & prevent dropleave https://www.runoob.com/jsref/event-ondrop.html ht ...
- Dart 编写Api弃用警告
例如body2在以后的版本将被bodyText1代替 @Deprecated( 'This is the term used in the 2014 version of material desig ...
- docker+tomcat+jenkin实现立即构建Springboot项目
一.创建一个Springboot项目 1.编写pom.xml <groupId>com.zwhxpp</groupId> <artifactId>springboo ...
- SpringBoot常见的异常问题
1. org.mybatis.logging.LoggerFactory Springboot启动报错 Caused by: java.lang.ClassNotFoundException: org ...
- Linux-两种磁盘分区方式
Linux文件设备 要理解Linux,首先要理解Linux文件结构 在Linux操作系统中,几乎所有的设备都位于/dev目录中 名称 作用 位置 SATA接口 电脑硬盘接口 /dev/sd[a-p] ...
- 1.3.1 apache的配置(上)
Apache是比较常用的web服务器软件,用来解析HTTP网页.这里需注意,apache本身并不能解析php页面,它是用来配置解析http页面的.当然,作为一款最流行的web服务器软件,apache支 ...
- Portainer中文汉化
一.概述 Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台操作.Swar ...