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取值范围是-2³¹到2³¹−1(即−2147483648 ~ 2147483647)。若原long值超出此范围,强转后结果不可预期。
if (l >= Integer.MIN_VALUE && l
Math.toIntExact(long):越界时抛ArithmeticException,更安全强转不是“四舍五入”或“缩放”,而是直接取低32位二进制补码值。
立即学习“Java免费学习笔记(深入)”;
(int) 3000000000L → 结果是−1294967296(非3000000000)(int) -3000000000L → 1294967296
Files.size(Path)返回long,不能直接(int)转,需确认文件大小确实在2GB以内若业务逻辑允许,优先避免强转;否则选用更明确、更安全的方式。
Math.toIntExact()代替裸强转,让问题暴露在运行时long配合Arrays或集合类(如LongStream)// guaranteed ≤ Integer.MAX_VALUE by design
不复杂但容易忽略细节。关键不是“能不能写”,而是“值是否真能安全容纳”。