int占4字节、范围约±21亿,long占8字节、范围约±922亿亿,字面量需加l后缀,int适用于循环变量等常规场景,long用于时间戳、大id等,int更省内存且运算略快。

Java 中 int 和 long 都是有符号整型,但它们在存储能力、适用场景和使用细节上差异明显。选错类型可能引发溢出、隐式截断或不必要的内存开销,实际开发中不能只看“够用就行”。
存储大小与数值范围
int 占 4 字节(32 位),取值范围是 -2,147,483,648 到 2,147,483,647(即 Integer.MIN_VALUE 到 Integer.MAX_VALUE)。
long 占 8 字节(64 位),范围扩大到 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(即 Long.MIN_VALUE 到 Long.MAX_VALUE)。
直观来看,long 的最大值约是 int 最大值的 40 亿倍——不是简单“大一点”,而是量级跃迁。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
字面量写法与编译检查
Java 把不带后缀的整数字面量默认当作 int 处理。超出 int 范围的数如果不加标识,会直接编译失败:
-
错误写法:
long timestamp = 1625097600000;→ 编译报错:“integer number too large” -
正确写法:
long timestamp = 1625097600000L;(推荐大写 L,避免与数字 1 混淆) - int 字面量无需后缀,如
int count = 1000;可直接写
典型使用场景对比
不是“越大越好”,而是按需分配:
- 优先用 int:循环变量、数组下标、状态码、年龄、商品库存(一般业务中≤千万级)、HTTP 状态码等
-
必须用 long:
- 毫秒级时间戳(
System.currentTimeMillis()) - 数据库主键 ID(尤其 Snowflake 或自增超 21 亿时)
- 文件大小(GB 级文件轻松突破 int 上限)
- 高并发计数器(如每秒百万请求累计)
- 毫秒级时间戳(
-
注意陷阱:金融金额虽数值大,仍不建议用 long(缺乏小数精度),应统一用
BigDecimal
性能与内存权衡
虽然现代 JVM 优化很强,但底层差异仍在:
- 单个变量:int 占 4 字节,long 占 8 字节;在百万级数组中,
int[1_000_000]比long[1_000_000]少用 4MB 内存 - 运算效率:32 位 CPU 上 int 运算原生支持,long 可能涉及多指令模拟(影响极小,但大规模批处理可测出差异)
- 自动装箱:
Integer和Long对象创建成本不同,高频创建 long 包装对象更耗资源
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










