当前位置: 首页 > news >正文

为什么Integer缓存-128 ~ 127

背景

面试题, 相关问题的考察.
题目大概是, 包装类型Integer == 比较的时候 : -127 ~ 128 是否相等.
其他是否相等?

原理

== 比较的是地址. 如果是不同的对象, 那么就不相等.

实践

下面是几个简单实践.

全部新建对象

解释: 新建对象后, 地址不同, 所以都是false
在这里插入图片描述

不新建对象

暂时的理解: -127 ~ 128 比较的对象的缓存
在这里插入图片描述

一些思考

时间多, 一些灵感

为什么设计这个缓存

HotSpot 团队研究, 90% 以上的整型使用落在 -128~127范围内(2000年代初期数据).
缓存范围 -128~127共 256 个对象 ≈ 4KB 内存(每个 Integer对象约16B)

为什么不多缓存一点

扩大到 -256~255则需 512 对象 ≈ 8KB,收益递减

冷知识: 上限值可以调整

部分源码如下:

// IntegerCache 源码片段(OpenJDK 17)
private static class IntegerCache {static final int low = -128; // 硬编码下限static final int high;static {high = java.lang.Integer.getInteger("java.lang.Integer.IntegerCache.high", 127);// 上限可通过VM参数调整}
}

为什么下限值不能自定义呢?

防止滥用:若允许下限调至 -1,000,000,可能导致缓存占用数百MB内存

其实其他包装类型也有缓存

缓存范围如下:

缓存范围可调性
Integer-128~127仅上限可调
Long-128~127完全不可调
Short-128~127完全不可调
Character0~127(ASCII范围)完全不可调

这个居然也是API?

Integer b = new Integer(100); // ⚠️ 已弃用API

9版本被弃用了: 神奇!

/*** @deprecated* It is rarely appropriate to use this constructor. * Use {@link #valueOf(int)} to take advantage of caching.*/
@Deprecated(since="9")
public Integer(int value) {this.value = value;
}

设计思想

这种设计体现了 Java “80/20法则” 的工程哲学——用最小成本解决大多数问题。

http://www.dtcms.com/a/331983.html

相关文章:

  • Linux常用命令(下)
  • 机器学习知识总结
  • PyTorch 2025全解析:从基础到前沿,深度学习框架的技术演进与实战指南
  • 嵌入式开发学习———Linux环境下网络编程学习(一)
  • 一步到位!经纬度批量转CGCS2000坐标系
  • sql的关键字 limit 和offset
  • 开源数据发现平台:Amundsen 快速上手指南
  • LeetCode 37.解数独:回溯法在二维网格中的应用与剪枝策略
  • AAAI论文速递 | Transformer如何听声辨物,实现像素级分割新突破!
  • Mybatis 源码解读-SqlSession 会话源码和Executor SQL操作执行器源码
  • 明远智睿SSD2351:以技术突破重构嵌入式市场格局
  • AI重构职场:岗位消亡与组织重塑
  • 【MATLAB技巧】已知平面上的一些点,拟合得到一个圆的例程,给出最小二乘与非线性迭代两种解法,附下载链接
  • ROS机器人云实践设计十年-2025-2015-
  • 速通 OpenPI 本地部署(远端推理)简易实现 —— WSL2 + Ubuntu 24.04 环境完整指南
  • 会议系统完整流程简版解析:创建会议、加入会议与消息转发
  • 【框架】跨平台开发框架自用整理
  • HTB Busqueda writeup
  • 经典蓝牙(BR/EDR)配对连接全过程:从 HCI 命令到 Profile 交互
  • C++编程学习(第23天)
  • Mybatis 源码解读-Plugin插件源码
  • 数据结构---关于复杂度的基础解析与梳理
  • 2025年缩水甘油苯基醚市场深度全景调研:投资前景分析及趋势预测
  • 机器学习——TF-IDF算法
  • 捉迷藏(BFS)
  • NY219NY220美光固态闪存NY224NY229
  • 数据结构---链式结构二叉树
  • PostgreSQL——触发器
  • 【慕伏白】CTFHub 技能树学习笔记 -- 基础知识 签到
  • leetcode-python-344反转字符串