选包装类还是基本类型取决于语义与场景:需表达空值时用包装类(如POJO、RPC接口),性能敏感场景用基本类型(如高频计算、数组存储)。

选基本类型还是包装类,关键看数据语义、运行环境和使用上下文。不是“哪个更好”,而是“哪个更合适”。
需要表达“空值”或“缺失状态”时用包装类
数据库字段可能为 NULL,JSON 字段可能不存在,接口参数可能未传——这些场景下,用基本类型会强制赋予默认值(如 int 默认是 0),掩盖业务含义。
- POJO 类的属性必须用包装类型(如 Integer、Boolean),这是多数企业规范的强制要求
- RPC 接口的入参和返回值也必须用包装类型,避免因默认值导致逻辑误判
- 比如用户年龄字段未填写,Integer age = null 更准确;若用 int age = 0,系统可能误判为“刚出生”
高频计算、数组存储、性能敏感场景优先用基本类型
数值运算、循环累加、图像处理、大规模数组操作等,基本类型内存小、无 GC 压力、CPU 缓存友好。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- int[] 比 Integer[] 节省约 60% 内存(无对象头、无引用指针)
- for 循环中做百万次加法,int 运算比 Integer 快 2–5 倍(避免反复装箱/拆箱)
- 局部变量(如 for (int i = 0; i
必须放入集合、泛型或调用对象方法时只能用包装类
Java 集合框架(ArrayList、HashMap)、Stream API、反射、序列化等均基于 Object 设计,基本类型无法直接参与。
立即学习“Java免费学习笔记(深入)”;
- List
list = new ArrayList() 是合法的;List 不可编译 - map.put("score", 95) 实际触发自动装箱为 Integer;但 map.get("score") 返回的是 Integer,需注意 null 安全
- 调用 Integer.parseInt()、Character.isLetter() 等工具方法,必须通过包装类访问
注意自动装箱/拆箱的隐藏陷阱
看似方便的 == 和 + 运算,背后可能引发 NPE 或性能问题。
- Integer a = null; int b = a; → 拆箱时抛 NullPointerException
- Integer x = 128, y = 128; System.out.println(x == y); → false(缓存只到 127)
- 在循环内频繁写 list.add(i),i 是 int 会被反复装箱,建议提前转成 Integer 复用或改用基本类型集合库(如 Eclipse Collections)

















