安全转换需先判空再转值,优先用静态方法;包装类转基本类型须防null,基本类型转包装类注意缓存范围,字符串转换须处理numberformatexception,集合中避免隐式拆箱。

Java 中基本类型与包装类之间的转换,关键在于避免 NullPointerException 和自动拆箱导致的运行时异常。安全转换的核心是:**先判空、再转值;优先用静态方法,少依赖自动装箱/拆箱**。
包装类 → 基本类型:必须防 null
包装类(如 Integer、Boolean)可能为 null,直接调用 .intValue() 等方法会抛出 NullPointerException。
- ❌ 危险写法:
int i = integerObj.intValue();(integerObj 为 null 时崩溃) - ✅ 推荐写法:用
Objects.requireNonNullElse()或三元判断提供默认值int i = integerObj != null ? integerObj : 0;
或 Java 8+:int i = Objects.requireNonNullElse(integerObj, 0); - ✅ 更简洁:使用包装类自带的静态方法(JDK 1.8+)
int i = Integer.valueOf("123"); // 安全解析字符串int i = Integer.parseInt("123"); // 可能抛 NumberFormatException,需 try-catch
基本类型 → 包装类:基本安全,但注意缓存陷阱
自动装箱(如 Integer i = 100;)通常是安全的,但要注意 Integer、Byte、Short、Character、Boolean 在特定范围有缓存(如 Integer 是 -128 ~ 127),超出后 == 比较会失效。
- ✅ 推荐显式使用
valueOf()(利用缓存且语义清晰):Integer i = Integer.valueOf(100); // ✅ 推荐Integer i = new Integer(100); // ❌ 已废弃,不复用对象 - ⚠️ 注意 == 判断:
Integer a = 127; Integer b = 127;→a == b为trueInteger c = 128; Integer d = 128;→c == d为false
✅ 应统一用equals()或直接比较基本值:a.equals(b)或a.intValue() == b.intValue()
字符串 ↔ 基本类型/包装类:统一走 parseXXX / valueOf
字符串转换是最易出错的场景,必须处理 NumberFormatException。
- ✅ 安全解析(带默认值):
int i = parseIntSafe("123", 0); // 自定义工具方法
public static int parseIntSafe(String s, int defaultValue) {
try { return Integer.parseInt(s); }
catch (NumberFormatException e) { return defaultValue; }
} - ✅ 包装类解析(可返回 null):
Integer i = Integer.valueOf("123"); // 解析失败抛异常Integer i = toInteger("123"); // Apache Commons Lang 的工具类,支持 null/空串返回 null
集合/泛型场景:避免隐式拆箱
Listint 会自动拆箱,若含 null 就崩溃。
- ❌ 危险:
int first = list.get(0); // list.get(0) 可能为 null - ✅ 安全:
Integer first = list.get(0);<br> int value = first != null ? first : 0; - ✅ Java 14+ 可用模式匹配(预览特性)简化判空逻辑,但生产环境建议仍以明确判空为主
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











