基本类型存值、占用固定字节(1~8字节),无对象开销;包装类存对象,需对象头、字段、对齐填充,内存占用显著更大(如integer约24字节)。

基本类型内存占用固定且极小
每种基本类型在 JVM 中占用字节数是明确定义的,与平台无关:
- byte/boolean:1 字节(注意:JVM 规范未强制 boolean 占 1 字节,但 HotSpot 实际按 1 字节对齐)
- short/char:2 字节
- int/float:4 字节
- long/double:8 字节
它们作为局部变量存在栈上,作为成员变量嵌入对象体内,不额外产生对象结构开销。
包装类内存远不止“存一个值”
以 Integer 为例(64 位 HotSpot JVM):
- 对象头(mark word + class pointer):通常 12 字节(开启指针压缩时)
- 实际值(
int value字段):4 字节 - 内存对齐填充:补到 8 字节倍数 → 加 4 字节
- 合计约 16 + 4 = 20 字节?不对,实际是 24 字节
其他包装类类似:Long/Double 约 24 字节,Short/Character 约 16 字节(因字段更小,填充少),但都远超其对应基本类型的 1~8 字节。
面试常考的隐含细节
别只背数字,得说清为什么——面试官想听的是理解深度:
- 包装类是普通 Java 对象,受 JVM 对象内存布局规则约束(对象头、实例数据、对齐填充)
- 即使值相同(如
new Integer(1)和new Integer(1)),也是两个独立对象,各自占一份内存 - 自动装箱(如
Integer i = 100)可能复用缓存对象(-128 ~ 127 范围内),但缓存本身也占堆内存,且仅限 Integer/Character 等少数类型 - 数组场景对比明显:
int[1000]占约 4KB;Integer[1000]占约 24KB+(每个元素都是独立对象引用+对象体)
怎么答才显得专业
一句话总结本质:基本类型是“裸数值”,包装类是“带壳的数值对象”——壳的成本,就是对象头、GC 元信息、引用间接访问的全部代价。 面试时顺带提一句:“所以高吞吐计算或大数组场景,优先选基本类型;而需要 null、泛型、集合时,才用包装类”,就很有分寸。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











