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

时间:2015-03-19 19:16:44

标签: java arrays boolean

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

boolean[] B = new boolean[n];

数组中的所有元素都是false

为什么不能这样做?

Boolean[] B = new Boolean[n];

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

2 个答案:

答案 0 :(得分:6)

差异

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

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

另一方面,boolean[]是一个基元的数组,这意味着你将总是有一个

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

ArrayList<Boolean> 相比

  

为什么它不像你声明ArrayList,在这里你使用包装类而不是原始类?

这是因为泛型不是为处理基元设计的,所以你不得不使用盒装版本。

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

State of the Specialization

另见:

答案 1 :(得分:4)

声明数组与声明ArrayList不同。 ArrayList 假设包含对象,而数组可以包含基本(引用)对象。

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

使用:

声明数组时
boolean[] B = new boolean[n];

所有元素都默认为false

但是,当您使用:

声明数组时
Boolean[] B = new Boolean[n];

所有元素都默认为null