安全转换需显式处理null,推荐Java 9+用Objects.requireNonNullElse(),通用场景用三元运算符,Optional适用于链式处理;避免try-catch兜底、冗余判空或自定义工具类。

直接调用 Integer.intValue() 或使用自动拆箱(如 int x = integerValue;)在值为 null 时会抛出 NullPointerException。安全转换的核心是**显式处理 null 情况**,明确指定默认值。
使用 Objects.requireNonNullElse()(推荐,Java 9+)
简洁、语义清晰,一行搞定:
int value = Objects.requireNonNullElse(integerObj, 0); // null 时取 0
也可配合其他默认逻辑:
- 用常量:
Objects.requireNonNullElse(num, -1) - 用计算值:
Objects.requireNonNullElse(num, getDefaultInt())
使用三元运算符(兼容所有 Java 版本)
最通用、直观的方式,适合对 null 有明确业务含义的场景:
int value = (integerObj != null) ? integerObj : 0;
注意:此处利用了自动拆箱,但因已判空,不会 NPE。可灵活替换默认值:
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
- 业务默认值:
integerObj != null ? integerObj : DEFAULT_TIMEOUT_MS - 抛自定义异常:
integerObj != null ? integerObj : throw new IllegalArgumentException("id required")(Java 14+)
使用 Optional(强调意图,适合链式处理)
当转换是某段 Optional 流程中的一环时更自然:
int value = Optional.ofNullable(integerObj).orElse(0);
优势在于可无缝衔接 map/filter 等操作,例如:
Optional.ofNullable(user.getAge()).filter(a -> a > 0).orElse(18)- 避免嵌套判空,提升可读性
避免这些做法
不要依赖 try-catch 捕获 NPE 来“兜底”——性能差且掩盖真实问题;不要写 integerObj == null ? null : integerObj.intValue()——返回类型仍是 Integer,没解决拆箱需求;不要重写或封装一个“安全拆箱工具类”再加一层间接性——标准库已有足够简洁方案。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










