JVM规范未规定boolean大小,仅定义其行为;实际存储依场景而定:字段常占1字节(可能对齐补零),数组元素固定1字节,局部变量按4字节int处理。

JVM 规范里根本没规定 boolean 占几个字节。
规范只定义行为,不定义大小
Java 虚拟机规范明确指出:boolean 是一种逻辑类型,取值只能是 true 或 false;但它没有为 boolean 指定任何字节码指令、存储格式或内存大小。规范只要求 JVM 能正确表示和运算布尔值,至于怎么存——交给具体实现。
实际怎么存,看使用场景
- 作为类字段(实例变量):HotSpot 等主流 JVM 通常分配 1 字节,并可能因内存对齐补零(比如前后字段导致它实际占 4 字节,但逻辑上仍按 1 字节理解)
-
作为 boolean[] 数组元素:底层复用
byte[],每个元素固定占 1 字节(不是 1 位,也不压缩) -
作为局部变量或方法参数:常被编译为
int类型处理(字节码用iload/istore),在操作数栈或局部变量表中以 4 字节整数形式存在 - 在寄存器中:可能根本不落地,仅用一个 CPU 寄存器位或整数寄存器临时表示
为什么不能简单说“就是 1 字节”
因为这不是规范强制的——它只是 HotSpot 的常见实现选择。某些嵌入式 JVM 或特殊优化版本可能用 4 字节对齐字段,甚至尝试位打包(虽不常见)。考试或教材写“1 字节”,是基于主流实践的简化共识,不是规范结论。
你真正该关注的点
写代码时,永远不要假设 boolean 的大小:
- 别用 Unsafe 直接读写 boolean 字段(底层可能是 byte 或 int)
- 别靠数组长度 × 1 字节估算内存(要算对象头、对齐、引用等开销)
- 别在跨 JVM 场景下依赖其二进制布局

















