java中将long显式转为int需用(int)强制转换,但存在截断风险;语法为(int)longvalue,如(int)1234567890l;必须确保值在int范围[-2147483648, 2147483647]内,否则结果不可预期。

Java中将long显式转为int需使用强制类型转换符号(int),但必须注意数据截断风险——long范围远大于int,超出部分会被静默丢弃,不抛异常。
语法格式与基本写法
标准写法为:(int) longValue。括号内是目标类型,紧跟待转换的long表达式。
- 变量转换:
long l = 1234567890L; int i = (int) l; - 字面量转换:
int i = (int) 9876543210L;(结果为-118580022,因高位被截) - 表达式转换:
int i = (int) (System.currentTimeMillis() / 1000);
必须检查数值是否在int范围内
int取值范围是-2³¹到2³¹−1(即−2147483648 ~ 2147483647)。若原long值超出此范围,强转后结果不可预期。
- 推荐先校验:
if (l >= Integer.MIN_VALUE && l - JDK 17+ 可用
Math.toIntExact(long):越界时抛ArithmeticException,更安全
常见易错场景
强转不是“四舍五入”或“缩放”,而是直接取低32位二进制补码值。
-
(int) 3000000000L→ 结果是−1294967296(非3000000000) - 负数同样截断:
(int) -3000000000L→1294967296 - 方法返回值如
Files.size(Path)返回long,不能直接(int)转,需确认文件大小确实在2GB以内
替代方案建议
若业务逻辑允许,优先避免强转;否则选用更明确、更安全的方式。
- 用
Math.toIntExact()代替裸强转,让问题暴露在运行时 - 对计数类场景(如数组索引),可改用
long配合Arrays或集合类(如LongStream) - 若确定值安全,注释说明理由,例如:
// guaranteed ≤ Integer.MAX_VALUE by design
不复杂但容易忽略细节。关键不是“能不能写”,而是“值是否真能安全容纳”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











