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

xy2*_*254 2 java arrays boolean

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

boolean[] B = new boolean[n];
Run Code Online (Sandbox Code Playgroud)

数组中的所有元素都是false

为什么不能这样做?

Boolean[] B = new Boolean[n];
Run Code Online (Sandbox Code Playgroud)

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

aio*_*obe 6

区别

Boolean[]是数组引用Boolean对象.这意味着索引i将始终是以下之一

array[i] == null
array[i] == Boolean.TRUE
array[i] == Boolean.FALSE
Run Code Online (Sandbox Code Playgroud)

boolean[]另一方面,A 是一个基元数组,这意味着你将永远拥有一个基元

array[i] == true
array[i] == false
Run Code Online (Sandbox Code Playgroud)

比较 ArrayList<Boolean>

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

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

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

    专业化的状况

也可以看看:


Kon*_*kov 5

声明数组与声明ArrayList. 将ArrayList假定为包含对象,而该阵列可以含有原语(引用)对象。

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

当您声明数组时:

boolean[] B = new boolean[n];
Run Code Online (Sandbox Code Playgroud)

所有元素都将默认为false.

但是,当您使用以下命令声明数组时:

Boolean[] B = new Boolean[n];
Run Code Online (Sandbox Code Playgroud)

所有元素都将默认为null.