使用布尔值或布尔值声明数组

declare array using Boolean or boolean

如果我想声明一个布尔数组,我曾经这样做过:

boolean[] B = new boolean[n];

数组中的所有元素都是假的

为什么不能这样做?

Boolean[] B = new Boolean[n];

我知道 boolean 是原始类型,而 Boolean 是它的包装器 class。为什么不像你声明的ArrayList,这里你使用wrapper class而不是primitive class?

声明数组不同于声明ArrayListArrayList 应该 包含对象,而数组可以包含原语 (引用)对象。

此外,声明基元数组和包装器类型之间存在差异。

当您声明数组时:

boolean[] B = new boolean[n];

所有元素将默认为 false

但是,当您声明数组时:

Boolean[] B = new Boolean[n];

所有元素将默认为 null

区别

A Boolean[]Boolean 对象的引用 的数组。这意味着索引 i 将始终是以下

之一
array[i] == null
array[i] == Boolean.TRUE
array[i] == Boolean.FALSE

另一方面,boolean[] 是一个 基元数组 ,这意味着您将始终拥有

array[i] == true
array[i] == false

比较ArrayList<Boolean>

Why it's not like you declare ArrayList, here you use wrapper class instead of primitive class?

这是因为泛型不是为处理原语而设计的,所以您不得不使用盒装版本。

这可能会在 Java 的未来版本中发生变化。这是 Brian Goetz 关于该主题的文章:

State of the Specialization

另请参阅:

  • Boolean vs boolean in Java
  • Why do people still use primitive types in Java?