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

Java 中基本数据类型不能直接用于泛型集合,必须通过对应的包装类来配合使用。核心在于理解“泛型只接受引用类型”这一限制,而包装类正是为基本类型提供对象形态的桥梁。
用包装类声明泛型集合
所有标准集合(如 ArrayList、HashMap、LinkedList)都要求类型参数是引用类型。基本类型如 int、boolean 无法直接写入尖括号中。
-
❌ 错误写法:
ArrayList<int> list = new ArrayList();</int>—— 编译不通过 -
✅ 正确写法:
ArrayList<integer> list = new ArrayList();</integer> - 其他常见对应:
HashMap<string double></string>、Set<boolean></boolean>、Queue<character></character>
自动装箱与拆箱让操作更自然
虽然底层必须用包装类,但 Java 5 起支持自动装箱(boxing)和拆箱(unboxing),大幅简化编码。
- 添加元素时,
list.add(42)会自动转为list.add(Integer.valueOf(42)) - 获取元素时,
int value = list.get(0)会自动调用.intValue() - 注意:若集合中存的是
null(比如从数据库读取空值),list.get(0)拆箱会触发NullPointerException
避开缓存陷阱与 == 比较误区
包装类对象在特定范围内复用实例(如 Integer 的 -128 到 127),这会影响 == 判断结果。
-
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(); }</t> - 调用:
sum(10, 3.14)——10自动装箱为Integer,3.14装箱为Double - 不可写
T extends int:基本类型不是类,语法非法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











