Java基本类型取值范围由JVM规范严格定义,选错类型会导致溢出或精度丢失;整数类型按字节宽度分为byte、short、int、long,均以补码表示;浮点类型float和double遵循IEEE 754标准,存在精度陷阱,金融计算须避免。

Java基本类型取值范围和存储特性不是靠经验猜的,而是由JVM规范严格定义的。选错类型轻则数据溢出、精度丢失,重则引发线上故障——比如用int存订单ID,某天超过21亿就翻车;用float做金额计算,0.1 + 0.2 ≠ 0.3是必然结果。
整数类型:字节决定边界,场景决定选型
四种整数类型本质是“位宽不同”的有符号整数,全部用补码表示,最高位为符号位:
- byte(1字节):-128~127。适合二进制协议、IO流缓冲区、状态标记(如HTTP状态码、设备开关标识)
- short(2字节):-32768~32767。实际项目中极少主动使用,多见于老旧系统或音视频采样原始值
- int(4字节):-2147483648~2147483647。日常计数、循环变量、数组索引、用户ID(中小规模系统)的默认选择
-
long(8字节):-9223372036854775808~9223372036854775807。必须显式加L后缀(如
1234567890123L),用于时间戳、分布式ID、大额订单号等超大整数场景
浮点类型:精度陷阱比范围更致命
float和double遵循IEEE 754标准,能表示极大/极小数值,但绝大多数十进制小数无法精确存储:
- float(4字节):约±3.4×10³⁸,有效数字6~7位。不推荐用于业务计算,仅适用于对精度要求低的图形渲染、传感器粗略读数
-
double(8字节):约±1.8×10³⁰⁸,有效数字约15位。仍是近似值,金融、计费、阈值判断必须避开;比较时要用
Math.abs(a - b) ,而非<code>== - 真正需要精确小数运算时,用
BigDecimal——它不基于二进制浮点,而是用字符串或整数构造,代价是性能开销
char与boolean:表面简单,细节易踩坑
char和boolean常被误解,但它们的行为很特殊:
立即学习“Java免费学习笔记(深入)”;
-
char(2字节):本质是无符号16位整数(0~65535),不是“字符容器”。可参与算术运算:
char c = 'A' + 1;结果是'B';System.out.println((int)'α');输出Unicode码点 -
boolean(无固定字节):JVM未规定单个变量占多少内存,仅允许
true/false。数组中通常按1字节模拟,但栈上变量大小由具体实现决定。切勿用==比较包装类Boolean,应始终用.equals()
默认值与内存布局:影响初始化逻辑和性能
基本类型在声明时就有确定行为,这点和引用类型完全不同:
- 成员变量自动初始化:
int x;默认为0,boolean flag;默认为false,char c;默认为'\u0000' - 局部变量必须显式赋值才能使用,否则编译报错——这是JVM强制的安全检查
- 所有基本类型都存在栈上(局部变量)或对象内联(成员变量),无对象头、无GC压力;一旦装箱成
Integer等包装类,就变成堆对象,带来分配和回收成本


















