Java原始类型字节大小固定且由JVM规范定义,最可靠方式是使用包装类的BYTES常量:Byte.BYTES=1、Short.BYTES=2、Integer.BYTES=4、Long.BYTES=8、Float.BYTES=4、Double.BYTES=8、Character.BYTES=2;Boolean无BYTES常量。

Java 原始类型(基本数据类型)的字节大小是固定的,由 JVM 规范定义,不随平台或运行环境变化。最直接、可靠的方式是使用对应包装类的 BYTES 静态常量。
用 BYTES 常量查原始类型字节数
每个基本类型的包装类都提供了 BYTES 字段,返回该类型占用的字节数。这是标准、零开销、无需反射或工具的方法:
-
Byte.BYTES→ 1 -
Short.BYTES→ 2 -
Integer.BYTES→ 4 -
Long.BYTES→ 8 -
Float.BYTES→ 4 -
Double.BYTES→ 8 -
Character.BYTES→ 2 -
Boolean没有BYTES常量(JVM 实现中通常按 1 字节对齐,但语言规范未规定确切大小)
用 SIZE 和位运算换算字节数
所有数值型包装类还提供 SIZE 字段,表示该类型占多少位(bit)。除以 8 即得字节数(整除):
-
Integer.SIZE == 32→32 / 8 == 4 -
Long.SIZE == 64→64 / 8 == 8 - 注意:
Boolean.SIZE是 1(位),但不能据此推断字节数,因实际内存布局受对齐和 JVM 实现影响
查看字符串或数组的字节大小
这不属于“原始类型”,但常被混淆。它们的字节大小需运行时计算:
立即学习“Java免费学习笔记(深入)”;
- 字符串:用
str.getBytes(StandardCharsets.UTF_8).length(推荐指定编码) - 字节数组:
bytes.length - 其他数组(如
int[]):元素个数 × 对应原始类型字节数(例如arr.length * Integer.BYTES)
不推荐依赖反射或 Unsafe 查原始类型大小
反射无法获取原始类型的内存布局信息;Unsafe 在现代 JDK(尤其是 JDK 9+)中受限且不稳定。这些方式既复杂又无必要——BYTES 已足够准确、简洁、可移植。


















