应直接用包装类常量查取值范围和字节数:Byte.MIN_VALUE至MAX_VALUE、Integer.BYTES等,既准确又跨平台;boolean无数值范围,Boolean.BYTES仅为逻辑约定,实际内存占用依JVM实现而定。

别硬背数字,直接用代码查最准。Java 八大基本类型的取值范围和内存占用不是靠口诀记出来的,而是由 JVM 规范强制定义、在包装类里明确定义的常量——你每次写一行 System.out.println(Integer.MAX_VALUE),就比背十遍“int 是 -2147483648 到 2147483647”更牢靠。
用包装类常量动态查范围
每个数值类型对应的包装类(Byte、Short、Integer、Long、Float、Double、Character)都提供 MIN_VALUE 和 MAX_VALUE 静态字段,它们是 JVM 规范的直接体现,跨平台一致、零误差。
-
System.out.println(Byte.MIN_VALUE + " ~ " + Byte.MAX_VALUE);→ 输出 -128 ~ 127 -
System.out.println(Character.MIN_VALUE + " ~ " + Character.MAX_VALUE);→ 输出 \u0000 ~ \uffff(即 0 ~ 65535) -
boolean没有数值范围,它只有true和false—— 不是数值类型,别往整数逻辑里套
用 .BYTES 字段确认字节数
Java 8+ 所有数值型包装类都带 BYTES 常量,这是获取内存占用最简洁、最安全的方式:
-
Byte.BYTES→ 1,Short.BYTES→ 2,Integer.BYTES→ 4 -
Long.BYTES→ 8,Float.BYTES→ 4,Double.BYTES→ 8,Character.BYTES→ 2 -
Boolean.BYTES返回 1,但这只是包装类的逻辑约定;JVM 并不保证boolean变量实际占 1 字节——栈上可能对齐为 4 字节,boolean[]底层常按 byte 打包。做内存估算时,跳过它
理解 char 和 short 的本质区别
两者都是 2 字节,但底层语义完全不同:
立即学习“Java免费学习笔记(深入)”;
-
char是无符号的 UTF-16 码元,范围固定为 0 ~ 65535,没有负数;写char c = -1;直接编译报错 -
short是有符号补码整数,范围是 -32768 ~ 32767 - 混用时会自动提升:
'a' + 1结果是98(int类型),不是char
float/double 记住“范围 ≠ 精度”
它们的取值上限由 IEEE 754 定义,但能精确表示的整数数量有限:
-
Float.MAX_VALUE ≈ 3.4 × 10³⁸,但能精确表示的整数最多约 1677 万(2²⁴) -
Double.MAX_VALUE ≈ 1.8 × 10³⁰⁸,可精确整数最多约 9 × 10¹⁵(2⁵³) - 超出后不是报错,而是跳变——比如
double d = 9007199254740993.0;,打印出来可能还是9007199254740992.0


















