arraylist必须用boolean而非boolean,因为泛型要求引用类型,boolean是基本类型不满足约束;boolean是引用类型且支持自动装箱拆箱,但需注意null导致的npe等问题。

Java 中 ArrayList 不能直接存 boolean 这样的基本类型,必须用它的包装类 Boolean。
为什么必须用 Boolean 而不是 boolean
ArrayList 是泛型集合,泛型参数要求是引用类型;boolean 是基本类型,不满足泛型约束。编译器会直接报错,例如:
❌ ArrayList
而 Boolean 是 java.lang 下的引用类型,符合泛型要求:
✅ ArrayList
自动装箱让存储变简单
从 JDK 1.5 起支持自动装箱(autoboxing),你写基本值,Java 自动转成 Boolean 对象:
-
list.add(true);→ 自动变成list.add(Boolean.TRUE) -
list.add(false);→ 自动变成list.add(Boolean.FALSE) - 取值时也自动拆箱:
boolean b = list.get(0);→Boolean对象自动转为boolean
需要注意的细节
虽然自动装箱方便,但有些行为容易出错:
-
null值可能引发NullPointerException:如果列表中存了null,再执行boolean b = list.get(i);会崩溃 -
Boolean.TRUE和Boolean.FALSE是单例对象,但手动new Boolean(true)会创建新对象(不推荐) -
contains()判断依赖Boolean.equals(),对true/false比较安全,但遇到null时返回false
典型用法示例
以下代码合法且常用:
ArrayList<boolean> flags = new ArrayList();
flags.add(true); // 自动装箱
flags.add(false);
flags.add(null); // 合法,但后续取值需判空
for (Boolean flag : flags) {
if (flag != null && flag) {
System.out.println("命中 true");
}
}</boolean>











