Java基本数据类型选择需按场景权衡:小范围值用byte/short省内存,大数用long防溢出,金融计算禁用float/double而用BigDecimal,字面量须带L/f等后缀,局部变量优先基本类型避免装箱开销。

Java 基本数据类型不是语法摆设,而是直接影响性能、内存和逻辑正确性的底层构件。项目中用得是否合理,往往体现在细节选择和常见陷阱规避上。
按场景选对类型,不图省事硬套 int
整数类型不能一概而用 int:
- HTTP 状态码(200、404)、协议字段、枚举状态位等固定在 -128~127 范围内的值,优先用 byte——节省 3/4 内存,尤其在百万级对象或网络字节流中效果显著
- 年份(如 2026)、小范围计数器(如页面页码),short 已足够,比 int 少一半空间
- 订单 ID、时间戳(System.currentTimeMillis())、分布式序列号,必须用 long;若误用 int,32 位溢出后结果不可逆(比如 2147483647 + 1 变成 -2147483648)
- 避免把所有数字都声明为 long:单个变量差异小,但数组(如 long[100000])比 int[100000] 多占 400KB 内存,GC 压力明显上升
浮点数要分清用途,金融计算必须绕开
float 和 double 不是精度高低的选择题,而是使用边界的划分:
- double 是默认且推荐的浮点类型:JVM 对其优化成熟,精度更高(约 15 位十进制),日常价格、温度、坐标等场景首选
- float 仅用于明确受限场景:嵌入式设备、GPU 计算、高频实时信号处理等对内存和吞吐敏感的场合;普通业务中用 float 反而易因精度损失引入隐藏 bug
- 金额、利率、库存数量等绝不使用 float/double:0.1 + 0.2 != 0.3 是二进制表示固有缺陷,必须用 BigDecimal 或整型单位(如“分”代替“元”)
字面量写法必须带后缀,编译器不会猜你意图
Java 对字面量有严格默认推断,不加后缀极易触发编译错误或静默截断:
立即学习“Java免费学习笔记(深入)”;
- long 字面量必须写 L(大写,避免与数字 1 混淆),例如:123456789012345L;写成 123456789012345 会被当作 int,超出范围直接报错
- float 字面量必须写 f 或 F,例如:3.14f;3.14 默认是 double,赋给 float 变量会编译失败
- byte/short 赋值时,仅当用 字面量且在范围内 才允许隐式收缩(如 byte b = 100;);一旦换成变量(int a = 100; byte b = a;),必须显式强转:byte b = (byte) a;
局部变量坚持基本类型,远离无谓装箱
包装类(Integer、Double 等)本质是对象,装箱拆箱带来额外开销:
- 循环累加、数学运算、数组索引等高频操作,一律用 int sum = 0;,而非 Integer sum = 0;——后者每次 += 都触发自动装箱,生成新对象
- 集合中存纯数值?优先考虑 Trove 或 Eclipse Collections 等原生类型集合库,彻底避开泛型擦除+装箱双重损耗
- Map 的 key 若为数值,用 Integer 没问题(hashCode 稳定),但自定义对象作 key 时,必须重写 hashCode() 和 equals(),否则再快的基本类型也救不了哈希逻辑


















