选int还是long取决于数值是否超21亿:未超用int,可能超则用long;int占4字节、性能优,适用于循环变量、索引、年龄等常规场景;long必用于时间戳、大ID、大文件大小等超限场景;long字面量须加L后缀。

选 int 还是 long,核心就一条:看数值会不会超过 21 亿(即 2,147,483,647)。没超,用 int;可能超,必须用 long。
int 是默认首选,覆盖绝大多数日常场景
它占 4 字节、运算快、JVM 优化好,适合:
- 循环变量(for (int i = 0; i < list.size(); i++))
- 数组索引、集合 size() 返回值
- 年龄、商品库存、HTTP 状态码、配置项数值等常规整数字段
- 方法参数和局部变量,除非有明确大数需求
long 必须用在三个硬性超限场景
int 最大值约 21 亿,一旦业务数据逼近或突破这个边界,溢出风险立现。典型刚需场景包括:
- 时间戳:System.currentTimeMillis() 返回毫秒值,2038 年后 int 就会溢出,必须用 long
- 数据库主键:尤其 Snowflake ID、自增 ID 超过 20 亿、分库分表后全局唯一 ID
- 大文件或字节数:比如 15GB 文件大小为 16,106,127,360 字节,远超 int 表达能力
声明与赋值别踩坑
long 字面量必须加 L(推荐大写,避免和数字 1 混淆):
立即学习“Java免费学习笔记(深入)”;
- ✅ 正确:long ts = System.currentTimeMillis(); 或 long id = 1234567890123L;
- ❌ 错误:long id = 1234567890123;(编译报错:integer number too large)
即使变量声明为 long,没加 L 后缀的大数字仍按 int 解析,超出范围直接编译失败。
别为了“将来可能变大”提前用 long
long 占 8 字节,内存翻倍,高频计算时性能略低。如果当前和可预见的业务中数值稳定在千万级以内(比如用户积分、订单数量),强行用 long 属于过早优化,反而增加 GC 压力和缓存不友好性。真正需要时再升级,比盲目扩大更稳妥。


















