选对Java基本类型需综合权衡范围、精度、内存和语义:byte用于小范围值(如状态码),short适用于中低范围(如年龄),int为常规默认,long用于时间戳等大数,float/double依精度需求选择,char表单字符,boolean仅表逻辑状态,包装类仅在泛型、集合、空值等必要场景使用。

选对基本数据类型不是“随便挑一个”,而是权衡范围、精度、内存和语义的综合判断。用错类型轻则浪费内存、拖慢性能,重则引发精度误差、空指针或溢出异常。
看数值范围,再定整数类型
别一上来就用 int —— 它虽常用,但未必最省最准。
- 年龄、状态码、数组索引等固定小范围值(0–127 或 -128–127):优先用 byte;尤其在百万级对象或大数组场景下,比 int 节省 75% 内存
- 传感器读数、年份、学生班级号(-32768–32767):short 比 int 少一半空间,适合嵌入式或高密度缓存
- 用户 ID、订单编号、计数器等常规整数:int 是默认选择,兼顾范围、性能与 JVM 优化(32 位 CPU 原生支持)
- 时间戳(毫秒级)、分布式 ID、超大统计值:必须用 long,且字面量记得加 L 后缀(如
1625097600000L),避免编译错误
浮点数不只看“小数”,更要看精度和用途
float 和 double 不是“小一点”和“大一点”的关系,而是精度与开销的取舍。
- 图形坐标、游戏帧率、传感器近似值等对精度容忍度高的场景:用 float(4 字节),比 double 节省一半内存,运算也略快
- 金额计算、科学计算、金融风控等要求精确结果的场合:绝不能用 float/double,改用
BigDecimal;若必须用基本类型,至少用 double 并配合严格舍入策略 - 注意:所有浮点字面量默认是 double,写
3.14f才是 float;0.1 + 0.2 != 0.3是常态,不是 bug
布尔与字符:别强行“压缩”或“扩展”
它们看似简单,误用却高频。
立即学习“Java免费学习笔记(深入)”;
-
boolean 只有两个值,没有“三态”;需要表示“未知/未设置”时,必须用
Boolean包装类,而非靠int(0/1/-1)模拟 - char 是 16 位 Unicode 单元,适合存单个字母、符号或基础汉字;不要用它存 emoji(部分需两个 char)、不要拿它当 byte 用(编码不同)
- 字符串统一用 String,别拆成 char 数组处理——除非做底层解析;String 不可变,拼接多用
StringBuilder
基本类型 vs 包装类型:按场景切换,不混用
不是“哪个高级用哪个”,而是“哪个合法用哪个”。
- 数组、循环计算、高频数学运算:坚持用 int、double 等基本类型,避免自动装箱带来的 GC 和 NullPointerException
- 放进
ArrayList、HashMap或作为泛型参数(如List<integer></integer>):必须用包装类,JVM 不允许基本类型作类型参数 - 需要表达“空”含义(如数据库字段可为 NULL):用 Integer、Double;比较时永远用
.equals(),不用==(缓存区间 -128~127 有陷阱) - 性能敏感模块(如实时风控引擎):优先考虑
IntStream、OptionalInt等原始类型特化 API,绕过装箱开销



















