You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Integer赋值Integer i=5与Integer i=new Integer(5)是否等价及内存分配问题

Java两种Integer初始化方式的核心差异

1. 运行效果是否等价?

两者不完全等价:

  • 如果仅读取变量存储的数值、做算术运算、调用equals()比较值,两者的表现没有差异
  • 但如果用==做引用相等性判断,差异会直接体现:
    比如Integer a = 5; Integer b = 5; 中a == b返回true;但Integer a = new Integer(5); Integer b = new Integer(5);中a == b返回false

2. 内存分配逻辑差异

两者的内存分配逻辑完全不同,不是同一种堆分配方式:

  • 对应写法Integer i = 5;
    这是Java自动装箱机制,底层实际执行的是Integer i = Integer.valueOf(5);。Integer内部维护了IntegerCache缓存池,默认会缓存-128~127区间的所有Integer对象,赋值的数值如果在缓存区间内,会直接返回缓存池中的已有对象引用,不会额外在堆中分配新内存;只有数值超出缓存区间时,才会新创建对象分配堆内存。
  • 对应写法Integer i = new Integer(5);
    这是显式调用Integer的构造方法创建新对象,无论传入的数值是否在缓存区间内,都会直接在堆上申请一块新的内存空间存储当前Integer对象,完全不会复用缓存中的已有对象。

补充说明:从Java 9开始,Integer(int)构造方法已被标记为废弃,官方更推荐使用自动装箱或Integer.valueOf()的写法,减少不必要的对象创建,降低内存开销。

内容的提问来源于stack exchange,提问作者Pedro Gómez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 11:24:02