java基本类型与包装类转型核心是装箱/拆箱机制:装箱调用valueof()(含缓存-128~127)、拆箱调用xxxvalue();null拆箱抛npe,==比较易因缓存失效出错,应优先判空、用equals()或integer.compare(),字符串转换须手动处理异常。

Java 中基本类型与包装类之间的转型,核心是理解装箱、拆箱机制及其潜在风险,而不是简单套用括号或赋值。真正保证类型安全,关键在于控制空值、避开缓存陷阱、明确转换意图,并在必要时手动干预。
自动装箱/拆箱虽方便,但 null 是最大隐患
编译器允许 int i = integerObj; 这样的自动拆箱,但若 integerObj 为 null,运行时直接抛 NullPointerException。这不是编译错误,而是静默的崩溃点。
- 避免直接对可能为
null的包装类变量做算术运算或比较(如if (i == 5)) - 判空优先:用
Objects.nonNull(i)或显式i != null再拆箱 - 需要默认值时,用
Integer.valueOf(s)配合Optional.ofNullable(i).orElse(0)
别依赖 == 比较包装类,尤其在 -128 到 127 范围外
Integer 等包装类对小整数(-128 ~ 127)做了缓存,所以 Integer a = 100; Integer b = 100; a == b 为 true;但 Integer a = 200; Integer b = 200; a == b 就是 false——因为新建了不同对象。
- 一律用
.equals()比较值是否相等(注意它会先判null) - 需要严格身份判断才用
==,且仅限明确知道是同一对象或缓存内值 - 数值比较推荐用
Integer.compare(a, b) >= 0,它天然处理null安全(返回负数/0/正数)
手动转换比自动更可控,尤其涉及输入解析
从字符串或外部来源拿到数字时,不能靠自动机制——它不处理格式错误或空值。
- 字符串转基本类型:必须用
Integer.parseInt(s)或Double.parseDouble(s),并包裹try-catch捕获NumberFormatException - 字符串转包装类:用
Integer.valueOf(s)(推荐),它内部调用parseInt并支持缓存,同样需异常处理 - 基本类型转字符串:统一用
String.valueOf(x),它对null安全(Integer传null返回字符串"null")
集合与数组互转时,别踩 Arrays.asList() 的坑
Arrays.asList(new Integer[]{1,2,3}) 得到的是可变 List,但 Arrays.asList(intArray) 实际返回 List<int></int>,不是你想要的 List<integer></integer>。
-
int[] → List<integer></integer>:用Arrays.stream(arr).boxed().collect(Collectors.toList()) -
List<integer> → int[]</integer>:用list.stream().mapToInt(Integer::intValue).toArray() - 若用 Apache Commons Lang,确认
ArrayUtils.toObject()和toPrimitive()的 null 处理策略,避免 NPE
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











