强制转换前必须做范围检查,核心是确认源值能否安全落入目标类型取值范围;需用语言内置常量判断边界,浮点转整型要先验非正常值再舍入,链式转换须逐层校验,建议封装为返回Optional或抛明确异常的安全函数。

强制转换前做范围检查,不是加一层“保险”,而是守住数据不失真的第一道门。关键不在转换动作本身,而在于你是否清楚源值能不能安全落进目标类型的“筐”里。
明确目标类型的合法边界
不同目标类型有固定取值范围,必须用语言内置常量(而非硬编码数字)来判断:
-
转 int:检查
value >= Integer.MIN_VALUE && value <= Integer.MAX_VALUE -
转 byte:用
Byte.MIN_VALUE和Byte.MAX_VALUE,而不是 -128 和 127 -
转 short:对应
Short.MIN_VALUE/Short.MAX_VALUE - 无符号场景(如 uint16):需额外确认源值 ≥ 0,再比对上限
浮点数转整型要多走两步
double 或 float 转 int 不只是范围问题,还涉及 NaN、无穷大和舍入策略:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 先调用
Double.isFinite(d)排除非正常值 - 再决定舍入方式:用
Math.round(d)还是直接截断(long)d - 最后对得到的 long 值调用
Math.toIntExact()或手动范围检查
链式转换必须逐层校验
比如 double → long → int,中间每一步都可能出错:
-
double → long:检查 d 是否在Long.MIN_VALUE到Long.MAX_VALUE内 -
long → int:不能直接(int)l,必须用Math.toIntExact(l)或等价判断 - 若含字符串解析(如
"1234567890123"→ double → long),还要前置校验字符串是否为有效数字
封装成可复用的安全函数
把检查和转换打包,避免重复逻辑和疏漏:
- 返回
Optional<Integer>或抛明确异常(如ArithmeticException),不静默失败 - 示例:
safeDoubleToInt(1747645890123.0)应该失败,因为毫秒时间戳远超 int 范围 - 业务允许降级时,统一返回 null 或默认值,但路径必须显式、可审计

















