Java集合不能直接存储基本类型,因为泛型擦除后操作的是Object类型,而基本类型不是Object子类,必须使用Integer、Boolean等包装类;支持自动装箱拆箱,但需注意空指针、==比较陷阱及缓存范围问题。

Java集合不能直接存储基本类型,必须使用对应的包装类型。
为什么集合不能存基本类型
Java的集合框架(如ArrayList、HashMap等)是基于泛型设计的,而泛型在编译后会进行类型擦除,最终操作的是Object类型。由于基本类型(如int、boolean、char等)不是Object的子类,无法直接参与泛型机制,所以必须用它们的引用类型——即包装类(Integer、Boolean、Character等)来替代。
常用基本类型与包装类型的对应关系
Java为每种基本类型都提供了对应的包装类,它们都位于java.lang包中,无需导入即可使用:
- int → Integer
- double → Double
- float → Float
- long → Long
- short → Short
- byte → Byte
- char → Character
- boolean → Boolean
自动装箱与拆箱让使用更自然
从Java 5开始支持自动装箱(autoboxing)和自动拆箱(unboxing),编译器会在必要时自动完成基本类型与包装类型之间的转换:
媒体包提供了可管理各种媒体类型的类。这些类可提供用于执行音频和视频操作。除了基本操作之外,还可提供铃声管理、脸部识别以及音频路由控制。本文说明了音频和视频操作。 本文旨在针对希望简单了解Android编程的初学者而设计。本文将指导你逐步开发使用媒体(音频和视频)的应用程序。本文假定你已安装了可开发应用程序的Android和必要的工具,同时还假定你已熟悉Java或掌握面向对象的编程概念。感兴趣的朋友可以过来看看
立即学习“Java免费学习笔记(深入)”;
- 装箱:int → Integer(如 list.add(10),10会被自动转为Integer对象)
- 拆箱:Integer → int(如 int x = list.get(0),Integer对象会自动转为int值)
注意:频繁或不当使用可能引发空指针异常(例如对null的Integer执行拆箱)或性能开销(大量临时对象创建)。
实际使用中的注意事项
使用包装类型时需留意几个常见问题:
- 比较时慎用==:它比较的是引用(是否同一对象),而非值。建议用equals()或Integer.compare()等方法
- 缓存机制:Integer在-128到127范围内的值会被缓存,所以Integer a = 100; Integer b = 100;时a == b为true;但Integer c = 200; Integer d = 200;时c == d为false
- 避免null导致的NPE:从集合取值后若未判空就直接拆箱,运行时会抛出NullPointerException
- 性能敏感场景可考虑第三方库(如Trove、Eclipse Collections)提供的原始类型集合









