5、Integer缓存池里同一个对象指的是什么?Integer 和String 内存结构逻辑完全一样?

目录

[1. 先讲一句关键规则](#1. 先讲一句关键规则)

[2. Integer 缓存池到底是什么?](#2. Integer 缓存池到底是什么?)

[3. 内存结构(和 String 常量池完全同逻辑)](#3. 内存结构(和 String 常量池完全同逻辑))

[4. 和 String s1="abc"、s2="abc" 对比](#4. 和 String s1="abc"、s2="abc" 对比)

String

Integer(-128~127)

[5. 为什么超过 127 就不一样了?](#5. 为什么超过 127 就不一样了?)

[6. 最精简总结(背这个)](#6. 最精简总结(背这个))

文后思考?


最严谨、最准确、无比喻的结论:
Integer a=10 / Integer b=10 的内存结构,确实和 String s1="abc" / s2="abc" 逻辑完全一样,只是缓存范围不一样。
下面我把「缓存池同一个对象」拆开讲清楚。


1. 先讲一句关键规则

当你写:
Integer a = 10;
Java 不会直接 new Integer(10),而是执行:
Integer a = Integer.valueOf(10);
而 Integer.valueOf() 内部有 缓存机制


2. Integer 缓存池到底是什么?

Integer 在类加载时,会 提前在堆里创建好一组固定对象
默认缓存范围: -128 ~ 127
也就是说:

  • 堆里已经预先存在:Integer{-128}、Integer{-127} ... Integer{0} ... Integer{127}
  • 这些是永久存在、复用的固定对象
    这就叫: 缓存池里的同一个对象

3. 内存结构(和 String 常量池完全同逻辑)

执行:

Integer a = 10;
Integer b = 10;
内存结构如下:
【虚拟机栈】
a → 地址 0x1234
b → 地址 0x1234
【堆】
0x1234:Integer{ value=10 } (缓存池里的固定对象)
所以:

  • a 和 b 指向堆中同一个 Integer 对象
  • a == b 比较地址 → true

4. 和 String s1="abc"、s2="abc" 对比

逻辑 完全一致,只是缓存来源不同:

String

  • 字面量 "abc" 进入 字符串常量池
  • 相同字符串永远复用同一个对象

Integer(-128~127)

  • Integer a=10 走 valueOf
  • Integer 缓存池 取预先创建好的对象
  • 相同数字复用同一个对象
    结论:内存结构一模一样,只是池子名字不同。

5. 为什么超过 127 就不一样了?

Integer x = 128;
Integer y = 128;
x == y → false
因为:

  • 128 不在默认缓存范围
  • valueOf(128) 会直接执行 new Integer(128)
  • 每次 new 都是新堆对象,地址不同
  • 所以 == 为 false

6. 最精简总结(背这个)

  1. Integer a = 10; 等价于 Integer.valueOf(10)
  2. -128 ~ 127 有缓存池,预先创建好对象,重复使用
  3. 所以 a 和 b 指向堆中同一个对象
  4. 内存结构 和 String 字面量完全一样
  5. 超过 127 就会 new 新对象,== 变成 false

文后思考?

1、Integer 缓存池默认缓存范围:-128 ~ 127,String缓冲池有缓存范围吗?

相关推荐
2501_933923253 分钟前
Spring Bean作用域揭秘:单例、原型、请求与会话的区别
java·后端·spring·java-ee
学编程就要猛20 分钟前
基于Spring AI 的智能聊天机器人
java·spring ai·chat robot
终端安全笔记22 分钟前
描述文件、企业证书、MDM 不是三个名字,是三层
android·ios·智能手机
修炼室23 分钟前
Java开发工程师笔试经验贴【高频知识】
java
木井巳35 分钟前
【记忆化搜索】最长递增子序列
java·算法·leetcode·深度优先·剪枝·推荐算法
杨杨杨大侠42 分钟前
知识库已经有了,Java 程序员还要做什么?Spring AI RAG 实战
java·openai·ai编程
伊信1 小时前
Spring AI 基础学习与应用
java·后端
字节暗面1 小时前
一次游戏安全SO静态分析记录:腾讯ACE与FairGuard加固强度对比
android·逆向工程·游戏加固
夜郎king1 小时前
基于 Java + Playwright 实现网站自动访问与数据采集(以腾讯云开发者社区为例)
java·playwright·网页数据获取
Anastasiozzzz1 小时前
重新定义 Agent 基建:Redis 在现代 AI 与智能体系统中的工程实践
java·人工智能·redis·ai