Java基本类型是影响性能、内存和健壮性的底层基石;整数选型需按实际范围选用byte/short/long避免溢出与浪费;浮点计算禁用float/double处理金额,须用BigDecimal,比较需误差容忍。

Java基本类型不是“写完就扔”的语法糖,而是直接影响性能、内存和健壮性的底层基石。用对了,代码轻快稳定;用错了,可能埋下溢出、精度丢失或内存浪费的隐患。
整数类型选型:别总用int,小范围就该用byte
日常开发中int确实是默认选择,但并非万能。关键看数据实际取值范围:
- 年龄、状态码、HTTP状态码(0–100)、RGB分量(0–255)等,完全在-128~127内 → 优先用byte,节省3/4内存(1字节 vs 4字节)
- 数据库中tinyint或smallint字段映射到Java时,应匹配使用byte或short,避免无谓类型提升
- 注意运算陷阱:byte b = 10; b = b + 1; 会编译失败——因为b+1结果是int,需显式强转:b = (byte)(b + 1)
- long用于时间戳(System.currentTimeMillis())、分布式ID、大金额计数等,赋值时务必加L后缀(如1234567890123L),否则超int范围会编译报错
浮点计算避坑:不用float/double做金额,也不直接==比较
float和double基于IEEE 754标准,天生存在二进制精度误差,比如0.1 + 0.2 ≠ 0.3。
- 金额、计费、金融类场景必须用BigDecimal,避免用double存储余额或单价
- 科学计算或图形渲染等对性能敏感、可接受微小误差的场景,可用double(比float精度高、JVM优化更好),float仅在极低内存设备(如嵌入式)中考虑
- 浮点数比较不能用==,应采用误差容忍方式:Math.abs(a - b)
- 需要四舍五入时,避免用Math.round(double),推荐BigDecimal.setScale(2, RoundingMode.HALF_UP)
char与boolean:看似简单,细节决定健壮性
char是无符号16位Unicode码元(\u0000–\uffff),boolean只有true/false两个逻辑值,但它们的底层行为常被忽略。
立即学习“Java免费学习笔记(深入)”;
- char可直接参与算术运算:'a' + 1 → 'b',适合字符偏移、大小写转换等,但注意越界(如'z'+1 → '{')
- 不要用int代替boolean(如status=1表示启用),这破坏语义且易出错;也禁止将boolean转为0/1数值(JVM不保证底层bit布局)
- boolean数组在JVM中通常按byte打包(非1 bit/元素),但逻辑上仍是独立true/false,无需手动位运算优化
- 成员变量boolean默认为false,局部变量必须显式初始化,否则编译报错
内存与性能真相:栈上分配、无GC、默认值全链路
基本类型变量存于栈,生命周期与作用域绑定,不走GC流程——这是它高效的根本原因。
- 方法参数、for循环中的int i、临时计算变量,全部栈分配,创建销毁开销几乎为零
- 类成员变量未显式赋值时,自动获得默认值(int→0,boolean→false,char→'\u0000'),但局部变量无默认值,必须初始化才能使用
- 包装类(Integer、Boolean等)是对象,存在堆内存、对象头、GC压力;仅在泛型、集合、null语义必需时才用,否则优先基本类型
- 大量数值计算(如矩阵运算、实时信号处理)中,用基本类型数组(int[])比List
快数倍——后者每个元素都是对象引用+装箱开销


















