Java八大基本类型字节数固定:byte=1、short=2、int=4、long=8、float=4、double=8、char=2、boolean无规范大小;取值范围需结合补码或IEEE 754理解,推荐直接使用XX.MAX_VALUE等常量。

记住八大基本类型的字节数比死背范围更可靠
Java 八大基本类型(byte、short、int、long、float、double、char、boolean)的内存占用是 JVM 规范强制规定的,不是平台相关值。这意味着你不需要查文档也能推导:只要记住 byte 是 1 字节、short 是 2 字节、int 是 4 字节、long 和 double 是 8 字节,其余就清晰了。
容易踩的坑:
-
char是无符号 2 字节,范围是0到65535(不是 -32768 ~ 32767),别和short混淆 -
boolean在 JVM 规范里没规定具体占多少字节——栈上可能用 1 字节对齐,数组中可能被压缩成 1 bit(如boolean[]底层常以 byte 为单位存),但你永远不该依赖它的“大小”做内存计算 -
float和double的取值范围由 IEEE 754 定义,不是简单“2^N-1”,记Float.MAX_VALUE和Double.MAX_VALUE更实际
用代码验证比查表更不容易出错
JDK 本身不提供直接获取基本类型字节数的 API(Integer.BYTES 这类常量是 Java 8+ 才加的),但你可以靠反射或数组间接验证。最稳的方式是构造数组并用 Unsafe(仅限调试)或观察 Runtime.totalMemory() 差值——不过对日常开发,直接查 Byte.BYTES、Integer.BYTES 等静态字段最省事。
示例:
立即学习“Java免费学习笔记(深入)”;
System.out.println(Byte.BYTES); // 1 System.out.println(Character.BYTES); // 2 System.out.println(Integer.BYTES); // 4 System.out.println(Long.BYTES); // 8
注意:Boolean.BYTES 是 1,但这只是包装类定义的“逻辑单位”,不代表 JVM 存储时真占 1 字节——这点必须分清。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
取值范围要结合符号位和编码理解
整数类型(byte/short/int/long)全是有符号补码表示,所以范围总是从 -2^(N-1) 到 2^(N-1)-1(N 是 bit 数)。比如 int 是 4 字节 → 32 bit → 范围就是 -2^31 到 2^31-1,即 Integer.MIN_VALUE 和 Integer.MAX_VALUE。
浮点类型不能套用整数公式:
-
float:IEEE 754 单精度,23 位尾数 + 8 位指数 → 大约 6~7 位十进制有效数字,最大正数约3.4028235e38f -
double:IEEE 754 双精度,52 位尾数 + 11 位指数 → 约 15~16 位有效数字,最大正数约1.7976931348623157e308
别试图手算边界值,直接用 Float.MIN_NORMAL、Double.NEGATIVE_INFINITY 这类常量更准。
面试或调优时真正该关注的其实是“对齐与填充”
单个变量的字节数只是起点。对象内存布局中,字段顺序、JVM 压缩指针(-XX:+UseCompressedOops)、以及字段对齐(通常按 8 字节边界填充)才真正影响总大小。比如一个只有 byte 和 int 的类,实际对象头 + 字段 + 对齐填充可能占 16 字节,而不是 5 字节。
所以,如果目标是优化内存(比如高频小对象),与其纠结 short 比 int 少 2 字节,不如:
- 把小字段集中声明(减少填充间隙)
- 避免
Object包装类型(Integer比int多至少 12 字节) - 用
ByteBuffer或Unsafe手动布局(极端场景)
基本类型的字节数只是拼图的第一块;真正吃内存的,往往是看不见的对齐字节和对象头。

















