java集合必须使用包装类(如list),基本类型不支持泛型;自动装箱/拆箱易引发nullpointerexception,应判空或用objects.requirenonnullelse;比较值须用objects.equals()避免缓存陷阱;转基本数组前需过滤null并处理空集合。

在 Java 集合中使用基本类型必须通过对应包装类,这是由泛型擦除和集合设计决定的硬性限制。避免类型错乱的关键不是“绕过”包装类,而是理解何时、如何安全地使用它们,并堵住常见漏洞。
明确集合只能存包装类,不能存基本类型
像 List
警惕自动拆箱引发的 NullPointerException
这是最隐蔽也最常出错的类型错乱根源:包装类变量为 null 时,一旦参与算术、比较或三元表达式,就会在运行时突然抛 NPE。
- 不要写:int x = list.get(0) + 1;(若 get(0) 返回 null,立刻崩溃)
- 推荐写:Integer val = list.get(0); int x = (val != null) ? val + 1 : 0;
- 或用工具方法:int x = Objects.requireNonNullElse(list.get(0), 0) + 1;
比较值时永远不用 ==,统一用 Objects.equals()
Integer a = 127; Integer b = 127; 用 == 可能为 true(缓存生效);但 Integer c = 128; Integer d = 128; 用 == 就是 false(超出缓存范围,对象不同)。这种不确定性会直接导致逻辑错乱。
- 错误:if (a == b)
- 正确:if (Objects.equals(a, b))
- 注意:Objects.equals 已处理 null,比 a != null && a.equals(b) 更简洁安全
从集合转回基本数组时,确保非空且有数据
调用 list.stream().mapToInt(Integer::intValue).toArray() 前,如果 list 本身为 null 或含 null 元素,依然会出错。
- 先过滤 null:list.stream().filter(Objects::nonNull).mapToInt(Integer::intValue).toArray()
- 或预判空集合:if (list == null || list.isEmpty()) return new int[0];
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











