Java中每个基本类型都有对应包装类,根本原因是基本类型不是对象,而Java整个生态围绕对象设计;包装类将基本值升级为引用类型,从而支持泛型、集合存储、null语义、工具方法及反射等面向对象机制。

适配泛型和集合框架
Java的集合(如ArrayList、HashMap)和泛型(如List<T>)底层用Object数组存储数据,只能接受对象,不能直接存int、double这类基本类型。
- 错误写法:
List<int> list = new ArrayList<>();—— 编译不通过 - 正确写法:
List<Integer> list = new ArrayList<>();—— Integer是对象,可存入 - 添加元素时自动装箱:
list.add(42);等价于list.add(Integer.valueOf(42));
支持null语义和空值场景
基本类型有强制默认值(int是0,boolean是false),无法表达“未知”“未设置”“数据库NULL”等业务含义;包装类可为null,语义清晰、安全可控。
- 数据库字段允许为空 → 查询结果用
Integer age = rs.getObject("age", Integer.class);,null表示未填写 - REST接口返回可选字段 → JSON反序列化后,
private Integer discountPercent;为null即代表不参与折扣 - 误用基本类型易引发逻辑错误:用
int age = 0表示“未填”,可能被当成真实年龄参与计算
提供类型专属的工具方法
基本类型本身没有方法,所有操作依赖静态工具类(如Math);包装类将常用功能封装为实例或静态方法,调用更自然、类型更安全。
-
Integer.parseInt("123")—— 字符串转整数,比new Integer("123")更常用且不抛异常(后者已弃用) -
Double.compare(a, b)—— 安全比较浮点数,避免==精度陷阱 -
Character.isLetter('a')、Boolean.parseBoolean("true")—— 各类判断与转换一目了然
满足反射、序列化等对象级机制要求
Java反射(Method.invoke())、序列化(ObjectOutputStream)、JDBC参数绑定等机制,统一以Object为契约。基本类型必须包装后才能参与这些流程。
立即学习“Java免费学习笔记(深入)”;
- JDBC预编译语句设参:
ps.setObject(1, userId);接收的是Long而非long - Spring MVC接收JSON请求体时,控制器参数若为
@RequestBody User user,其中user.id字段声明为Long才能接收null - 使用Jackson或Gson序列化时,
int字段永远输出数字,Integer字段为null则可配置为忽略或输出null


















