应按实际取值范围选择最小够用的整型:byte(-128~127)用于像素值等小范围数据,short(-32768~32767)用于音频采样等中等范围,int最常用,long仅在时间戳等必需场景使用且字面量须加l后缀。

Java 整数类型的选择不是“越大越安全”,而是要在数值范围、内存占用、CPU缓存效率和JVM优化之间取得平衡。int 是默认且最常用的选择,long 仅在必要时使用,而 byte 和 short 在特定场景下能带来可观的内存收益。
按实际范围选最小够用的整型
盲目升级到 long 或 int 不仅浪费内存,还可能降低 CPU 缓存命中率。关键看数据真实取值区间:
- 像素值、状态码、HTTP 状态、小范围计数器 → 用 byte(-128 ~ 127)
- 音频采样、某些协议字段、中等范围索引 → 用 short(-32768 ~ 32767)
- 数组下标、循环变量、年龄、商品库存、普通 ID → int 足够且高效
- 时间戳(System.currentTimeMillis())、文件大小、金融系统中的“分”单位金额、数据库自增主键(尤其分库分表后)→ 必须用 long
long 使用必须加 L 后缀,否则编译失败
Java 把无后缀的整数字面量默认当作 int 处理。即使数值本身在 int 范围内,赋值给 long 变量虽可隐式转换,但若字面量超出 int 最大值(2147483647),不加 L 会直接报错:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
正确:
long ts = 1718970345678L;、long id = 0x1F2A3B4C5D6E7F8AL; -
错误:
long x = 9223372036854775807;(编译报错:integer number too large)
避免溢出比追求性能更优先
整数溢出是静默错误,不会抛异常,但会导致逻辑崩溃。不要靠“大概不会超”来赌:
- 两个 int 相乘结果可能远超 int 范围 → 先转 long 再算:
long result = (long)a * b; - 累计求和(如统计总耗时、总字节数)→ 初始就用 long 类型变量
- 涉及时间差计算(如
endTime - startTime)→ 两端都应为 long,否则毫秒级差值可能溢出
大量数据场景下,小整型真能省内存
当处理百万级以上对象或大数组时,类型大小直接影响堆内存用量和 GC 压力:
- 一个含 100 万个 int 字段的 POJO 数组,该字段占约 4MB;换成 byte,仅需 1MB
- 图像处理中 RGB 各通道值固定为 0~255 → 使用
byte[]存储比int[]节省 75% 内存 - 注意:包装类(如
Byte、Short)有缓存(-128~127),但仅限valueOf()创建的对象;直接 new 仍生成新实例
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










