Java泛型只接受引用类型,基本类型需用包装类(如Integer)替代;支持自动装箱/拆箱,但需防null异常和==比较陷阱;泛型方法可通过Number等上界约束兼容基本类型输入。

Java 中基本数据类型不能直接用于泛型集合,必须通过对应的包装类来配合使用。核心在于理解“泛型只接受引用类型”这一限制,而包装类正是为基本类型提供对象形态的桥梁。
用包装类声明泛型集合
所有标准集合(如 ArrayList、HashMap、LinkedList)都要求类型参数是引用类型。基本类型如 int、boolean 无法直接写入尖括号中。
-
❌ 错误写法:
ArrayList<int> list = new ArrayList<>();—— 编译不通过 -
✅ 正确写法:
ArrayList<Integer> list = new ArrayList<>(); - 其他常见对应:
HashMap<String, Double>、Set<Boolean>、Queue<Character>
自动装箱与拆箱让操作更自然
虽然底层必须用包装类,但 Java 5 起支持自动装箱(boxing)和拆箱(unboxing),大幅简化编码。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 添加元素时,
list.add(42)会自动转为list.add(Integer.valueOf(42)) - 获取元素时,
int value = list.get(0)会自动调用.intValue() - 注意:若集合中存的是
null(比如从数据库读取空值),list.get(0)拆箱会触发NullPointerException
避开缓存陷阱与 == 比较误区
包装类对象在特定范围内复用实例(如 Integer 的 -128 到 127),这会影响 == 判断结果。
立即学习“Java免费学习笔记(深入)”;
-
Integer a = 100, b = 100;→a == b为 true(同对象) -
Integer c = 200, d = 200;→c == d为 false(不同对象) - 安全比较统一用
.equals(),或先确保非空再拆箱:a.intValue() == b.intValue()
泛型方法中兼容基本类型输入
自定义泛型方法不能直接接收基本类型参数,但可通过上界约束 + 自动装箱实现“透明支持”。
- 定义:
<T extends Number> double sum(T a, T b) { return a.doubleValue() + b.doubleValue(); } - 调用:
sum(10, 3.14)——10自动装箱为Integer,3.14装箱为Double - 不可写
T extends int:基本类型不是类,语法非法

















