选对基本类型需综合数值范围、内存开销、计算精度、业务语义四维度;byte/short适用于小范围场景,int为默认整数类型,long用于大数,浮点数慎用,精确计算用BigDecimal,char和boolean语义严格,包装类与基本类型按场景切换。

选对基本类型,关键看四个维度:数值范围、内存开销、计算精度、业务语义。不是“哪个更高级”,而是“哪个更贴切”。
先看数值范围,再定整数类型
别一上来就用 int —— 它虽常用,但未必最省或最准。
- byte(-128 ~ 127):适合状态码、HTTP响应码、小范围计数。百万级对象中用 byte 替代 int,内存可节省约 75%
- short(-32768 ~ 32767):如年份、传感器原始值、低密度缓存项。现代 JVM 中性能优势不明显,除非明确受限于空间
- int(-2³¹ ~ 2³¹−1):默认整数类型,适用于 ID、数量、索引等常规场景。32 位 CPU 原生支持,JVM 优化充分
- long(-2⁶³ ~ 2⁶³−1):时间戳(毫秒/纳秒)、分布式唯一 ID、大文件尺寸。字面量必须加 L 后缀,否则可能编译失败或静默溢出
浮点数不只看“有没有小数”,更要看精度是否容错
float 和 double 都是二进制近似表示,天生存在精度误差。
- 0.1 + 0.2 ≠ 0.3 是正常现象,不是 bug
-
float(4 字节):仅在嵌入式、图形着色器等内存/带宽敏感场景使用;需显式写
3.14f - double(8 字节):Java 默认浮点类型,科学计算可用,但金融金额、账务比对等必须避开
- 精确计算一律用 BigDecimal;若必须用基本类型,至少用 double 并配合
Math.round()或指定舍入模式
字符与布尔:简单但误用高频
它们看似无脑,实则边界清晰,强行扩展容易埋雷。
立即学习“Java免费学习笔记(深入)”;
-
char 是 16 位 Unicode 单元,用于单个字符(如
'A'、'中')。不要用它存 emoji(部分需 surrogate pair)、不要当 byte 用(编码逻辑不同) -
boolean 只有
true/false两种状态。需要“未设置/未知/空”语义时,必须用 Boolean 包装类,不能靠int的 -1/0/1 模拟 - 字符串操作统一用 String 或 StringBuilder;拆成
char[]仅限底层解析(如自定义词法分析器)
基本类型 vs 包装类:按场景切换,不混用
这不是风格问题,而是 JVM 层面的硬约束和语义需求。
- 高频计算、数组存储、循环变量 → 用 int、double 等基本类型。避免自动装箱带来的 GC 开销和 NullPointerException
- 泛型容器(
List<Integer>)、POJO 属性(DTO/VO/Entity)、数据库字段映射 → 必须用 包装类。阿里巴巴 Java 开发手册明确要求 POJO 属性禁用基本类型 - 需要表达 null(如“年龄未填写” vs “年龄为 0”)→ 只能用 Integer;成员变量默认值也不同:
int age = 0无法区分初始值与业务值,Integer age = null可明确表达缺失 - 比较包装类用
equals();拆箱前务必判空;手动装箱优先用Integer.valueOf(100)(复用缓存),不用new Integer(100)(已废弃)


















