简短结论:Java 的泛型(Generics)不直接支持基本类型(如 int、double、char 等),只能使用引用类型(对象类型)。
Java 泛型在编译期通过类型擦除(type erasure)实现,运行时泛型信息被擦除,底层通常当作 Object 处理。而基本类型不是 Object 的子类,无法被当作对象使用。
例如,下面这是不合法的:
List<int> list = new ArrayList<>(); // ❌ 编译错误
需要使用基本类型对应的包装类(Wrapper Class):
List<Integer> list = new ArrayList<>(); // ✅
常见对应关系:
int → Integerdouble → Doublechar → Characterboolean → Booleanlong → Long虽然泛型不能直接用基本类型,但 Java 提供了自动装箱,使使用起来很方便:
List<Integer> list = new ArrayList<>();
list.add(10); // int 自动装箱为 Integer
int x = list.get(0); // Integer 自动拆箱为 int
int[] a; // ✅
List<int>[] b; // ❌
Java 8 之前的 Stream / 泛型容器 早期写泛型算法时,基本类型需要手动装箱,有性能损耗。
Java 8+ 的专用类(避免装箱) 为了性能,JDK 提供了专用类型(不是泛型):
IntStream, LongStream, DoubleStreamIntSummaryStatistics 等List<int> list; // 有望在未来版本支持(目前不支持)
如果你关心性能优化或源码层面原因,我也可以进一步展开。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。