java基本数据类型的存储空间和取值范围由位数、编码方式(补码/ieee 754)及jvm规范共同决定:byte/short/int/long/char字节数固定,整型用补码得范围−2ⁿ⁻¹~2ⁿ⁻¹−1,char为0~65535,float/double依ieee 754定义范围,boolean无固定大小但实际常占1字节,所有极值应通过包装类常量获取。

存储空间直接由位数决定
每种基本类型占用的字节数是固定的,JVM 不会因平台或版本改变:• byte 占 1 字节 → 8 位 → 可表示 2⁸ = 256 种状态
• short 占 2 字节 → 16 位 → 2¹⁶ = 65536 种状态
• int 占 4 字节 → 32 位 → 2³² 种状态
• long 占 8 字节 → 64 位 → 2⁶⁴ 种状态
• char 占 2 字节 → 16 位 → 0 到 65535(无符号,对应 Unicode 基本平面)
• float/double 分别占 4 和 8 字节,按 IEEE 754 标准编码,不是简单线性映射
取值范围取决于“怎么解释这些位”
整数类型(byte/short/int/long)全部采用有符号补码表示:
→ 最高位是符号位(0 正、1 负)
→ 所以 n 位能表示的范围是 −2ⁿ⁻¹ 到 2ⁿ⁻¹−1
例如 int 是 32 位:−2³¹ = −2147483648,2³¹−1 = 2147483647
而 char 是无符号的 16 位:0 到 2¹⁶−1 = 65535
float 和 double 的范围不是靠“最大整数”算出来的,而是由 IEEE 754 的指数位和尾数位共同决定,所以 MIN_VALUE 指的是最小正数(非负下界),不是最小可表示数
别靠心算,用包装类常量最稳妥
JVM 不要求你背公式,它把所有边界值都封装好了:
• Byte.MIN_VALUE / Byte.MAX_VALUE → −128 / 127
• Short.MIN_VALUE / Short.MAX_VALUE → −32768 / 32767
• Character.MIN_VALUE / Character.MAX_VALUE → '\u0000' / '\uffff'
• Float.MIN_VALUE(最小正数)、Float.MIN_NORMAL(最小规格化数)、Float.NEGATIVE_INFINITY 才代表真正的负无穷下界
直接调用这些静态字段,比手算更准确、更可读、也更符合 Java 的设计哲学
boolean 和内存对齐的实际表现
boolean 本身没有规定字节大小,JVM 规范只定义语义(true/false),不定义存储细节:
• 单个 boolean 字段在对象里,HotSpot 通常按 1 字节对齐(节省空间不如省功耗重要)
• boolean[] 数组底层用 byte 实现,每个元素占 1 字节 —— 不是 1 bit,因为 CPU 不支持 bit 级寻址
这意味着:不要假设 boolean 节省了大量内存;真正省空间的是紧凑结构(如用 int 的位运算模拟多个 flag)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











