Integer缓存池

new Integer(127)和Integer.valueOf(127)是有区别的:理由如下!
  • new Integer(127):每次都会创建一个新的对象
  • Integer.valueOf(127):会使用缓存池中的对象,意味着多次调用都是同一个地址
Integer a1= new Integer(127);
Integer b1= new Integer(127);
System.out.println(a1 = = b1); // false
Integer a2 = Integer.valueOf(127);
Integer b2 = Integer.valueOf(127);
System.out.println(a2 = = b2); // true

Java8中Integer缓存池的范围是[-128,127]。意味着在这个范围内的数值多次使用,都是同一个地址。

Integer.valueOf(int i)的实现:

过程:首先判断该数是否在缓存池范围内,如果在就从缓存池里面取,否则重新新建一个对象。

public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
}

缓存结构:

源码可以看出该缓存池使用一个数组实现的,范围在[-128,127]之间都是存缓存的。

private static class IntegerCache {static final int low = -128;static final int high;static final Integer cache[];static {// high value may be configured by propertyint h = 127;String integerCacheHighPropValue =sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");if (integerCacheHighPropValue != null) {try {int i = parseInt(integerCacheHighPropValue);i = Math.max(i, 127);// Maximum array size is Integer.MAX_VALUEh = Math.min(i, Integer.MAX_VALUE - (-low) -1);} catch( NumberFormatException nfe) {// If the property cannot be parsed into an int, ignore it.}}high = h;cache = new Integer[(high - low) + 1];int j = low;for(int k = 0; k < cache.length; k++)cache[k] = new Integer(j++);// range [-128, 127] must be interned (JLS7 5.1.7)assert IntegerCache.high >= 127;}private IntegerCache() {}
}

编译器在自动装箱的过程中,首先会调用Integer.valueOf(int i)来创建。如果存在相同值,那么就会使用缓存中相同的地址。

Integer a = 127;
Integer b = 127;
System.out.println(a == b);//true
Integer c = 128;
Integer d = 128;
System.out.println(c= =d);//false

总结

因为特殊性,所以在开发中使用该包装类的时候,如果是比较两个值是否相等,尽量用equals()来比较。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github 访问慢,一键加速,完美访问

文章目录1. 下载dev-sidecar2. 安装3. 开机启动4. 安装证书5. 开启增强模式6. 重新启动dev-sidecar7. 测试验证1. 下载dev-sidecar https://gitee.com/docmirror/dev-sidecar/releases/v1.6.1 2. 安装 这里windows环境演示 双击安装 3. 开机启动 4. 安装证书 5. 开启增强…

给 AI 讲故事,如何教它脑补画面?

阿里妹导读&#xff1a;视觉想象力是人与生俱来的&#xff0c; AI 能否拥有类似的能力呢&#xff1f;比如&#xff1a;给出一段故事情节&#xff0c;如何让机器展开它的想象力&#xff0c;“脑补”出画面呢&#xff1f;看看阿里AI Labs 感知实验室的同学们如何解决这个问题。 …

产业数字化升级进入深化期,腾讯智慧出行释放“数字底座”核心能力

6月24日&#xff0c;腾讯智慧出行举办线上年度新品发布会。本次发布会以“创造出行新价值”为主题&#xff0c;发布了生态车联网产品TAI 3.0、全新一代自动驾驶虚拟仿真平台TAD Sim 2.0&#xff0c;以及汽车云数字营销解决方案、智慧交通解决方案&#xff0c;从深度和广度上展示…

MySQL与Redis的双写一致性解决方案

文章目录一、解决方案1.1 先更新缓存&#xff0c;再更新数据库1.2 先删除缓存&#xff0c;再更新数据库1.3 先更新数据库&#xff0c;再更新缓存二、总结一、解决方案 1.1 先更新缓存&#xff0c;再更新数据库 &#x1f4a3; 问题: 数据库更新成功了&#xff0c;但是由于异常…

解密双十一小程序云背后毫秒级伸缩的Serverless计算平台:函数计算

自2017年第一批小程序上线以来&#xff0c;越来越多的移动端应用以小程序的形式呈现。小程序拥有触手可及、用完即走的优点&#xff0c;这大大减少了用户的使用负担&#xff0c;使小程序得到了广泛的传播。在阿里小程序也被广泛地应用在淘宝/支付宝/钉钉/高德等平台上&#xff…

RuoYi-Cloud 进阶篇_01( Seata 单机环境搭建)

文章目录一、部署单机 TC Server1. 下载Seata2. 解压缩3. 启动4. 监听日志5. 启动命令讲解一、部署单机 TC Server 1. 下载Seata 在https://github.com/seata/seata/releases 这里找到对应的版本软件包进行下载 注&#xff1a;单机模式只适用于学习或者本地测试阶段&#xf…

Logtail 混合模式:使用插件处理文件日志

作为一个服务百万机器的日志采集 agent&#xff0c;Logtail 目前已经提供了包括日志切分、日志解析&#xff08;完整正则、JSON、分隔符&#xff09;、日志过滤在内的常见处理功能&#xff0c;能够应对绝大多数场景的处理需求。但有些时候&#xff0c;由于应用的历史原因或是本…

腾讯车联发布TAI3.0:三步实现汽车智能进化,2个月快速上车

6月24日&#xff0c;“2020腾讯智慧出行新品发布会”在线上举行&#xff0c;全新升级的TAI3.0生态车联网正式亮相&#xff0c;并在新款哈弗F7上进行了真实驾车场景的功能展示。 据介绍&#xff0c;TAI3.0包含两个车载APP——腾讯随行和腾讯爱趣听&#xff0c;以及一个生态开放…

在一个大型流量系统中如何进行亿级UV(用户访问记录)统计

文章目录&#x1f496;前言一、&#x1f49c;问题引出二、&#x1f496;解决方案&#x1f496;前言 &#x1f331;本文主要介绍在一个大型流量系统中如何统计每个用户的访问记录。 一、&#x1f49c;问题引出 &#x1f31f;在网站中做UV&#xff08;用户访问记录&#xff09;…

error和exception 的区别

Error和Exception在计算机编程中都表示程序执行过程中出现的问题或错误情况&#xff0c;但它们之间存在一些关键区别。 性质&#xff1a;Error通常表示一种不可恢复的问题&#xff0c;它会导致程序无法继续执行。这些错误可能是由于语法错误、逻辑错误、硬件故障或其他不可预测…

RuoYi-Cloud 进阶篇_02( Seata 高可用集群与 Nacos 注册中心整合)

文章目录二、安装步骤1. 创建数据库2. 修改配置文件3. 调整数据库驱动4. 修改配置中心二、 启动和验证2.1. 启动nacos2.2. 启动TC Server2.3. 启动第二个节点2.4. 验证高可用二、安装步骤 1. 创建数据库 创建名称为ry_seata的数据库,并初始化ry_seata_20210128.sql脚本 2.…

腾讯TAD Sim2.0领跑自动驾驶仿真市场 双擎驱动构建新一代仿真平台

随着自动驾驶领域硬件、算法等方面的快速发展&#xff0c;虚拟仿真技术在自动驾驶研发和测试领域的应用日渐广泛&#xff0c;成为自动驾驶量产应用的必备工具&#xff0c;城市智慧交通调度管理和相关法规制定的有力辅助。 在这片行业竞争新高地上&#xff0c;腾讯自动驾驶仿真…

RuoYi-Cloud 部署篇_03(windows环境 Oracle + nginx版本)

请参考RuoYi-Cloud 分布式部署_03&#xff08;linux环境 Mysqlnginxredis版本&#xff09;

为了实现在线库的复杂查询,你还在双写吗?

一、在线库不支持在线复杂查询 做在线业务的开发者经常会碰到这样的难题&#xff1a;在线数据库上面运行稍微复杂点的查询&#xff0c;在线业务就挂了&#xff01;不管是单机数据库如MySQL、PG&#xff0c;还是分布式数据库&#xff0c;HBase、MongoDB、Cassandra都有这个问题…

JUC 中断线程的3种方式

文章目录介绍中断方式一中断方式二中断方式三源码解析总结介绍 三个方法&#xff1a; 1、public boolean isInterrupted()判断线程是否被中断&#xff0c;如果此线程已被中断&#xff0c;则为true &#xff1b;否则false 。 2、public void interrupt()中断线程 3、public …

RuoYi-Cloud 进阶篇_04( Seata 高可用集群 AT模式 需求实战)

需求背景&#xff1a; 模拟下单场景&#xff1a;首先去在自己的本地创建一条下单记录&#xff0c;同时&#xff0c;还要去调用库存服务&#xff0c;执行减库存操作。 这里演示一个客户下订单的流程服务来为小伙伴们进一步了解一下分布式事务到底如何使用? 首先&#xff0c;我…

基于Tablestore多元索引打造亿量级店铺搜索系统

一、方案背景 对于一套GEO管理系统&#xff0c;其核心点与瓶颈在于数据库的存储性能与查询能力&#xff1b;一方面&#xff0c;存储服务需要应对海量数据的低延迟存、读&#xff0c;另一方面&#xff0c;存储服务也要提供高效的GEO多维度数据检索。表格存储&#xff08;TableS…

Java中的序列化与反序列化机制

文章目录一、序列化的定义二、为什么需要序列化呢&#xff1f;三、如何序列化四、案列实现4.1、将对象序列化位二进制流4.2 将序列化后的二进制流反序列化为对象五、总结一、序列化的定义 &#x1f4a1; 所谓的序列化就是将Java 中的对象转换成一种流的形式&#xff08;二进制…

今天起,我们喝的百年牛奶要变了!

一天从一杯光明奶开始&#xff0c;是很多小伙伴的日常&#xff1a;牛奶下肚&#xff0c;醇厚、香甜的奶味仍余舌尖。如今&#xff0c;这家百年老字号正在不断焕发新能量。 今天&#xff0c;光明乳业与阿里云达成战略合作。双方将整合优质资源&#xff0c;形成聚合效应&#xf…

Spring 从入门到入土——AOP 就这么简单!| 原力计划

作者| 冢狐责编 | 夕颜出品 | CSDN博客什么是AOP&#xff1f;面向切面编程&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;通过预编译的方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff…