如果我想声明一个布尔数组,我曾经这样做过:
boolean[] B = new boolean[n];
数组中的所有元素都是false
为什么不能这样做?
Boolean[] B = new Boolean[n];
我知道boolean是原始类型,而Boolean是它的包装类。为什么它不像你声明ArrayList,在这里你使用包装类而不是原始类?
答案 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关于这个主题的文章:
另见:
答案 1 :(得分:4)
声明数组与声明ArrayList
不同。 ArrayList
假设包含对象,而数组可以包含基本或(引用)对象。
此外,声明基元数组和包装器类型之间存在差异。
使用:
声明数组时boolean[] B = new boolean[n];
所有元素都默认为false
。
但是,当您使用:
声明数组时Boolean[] B = new Boolean[n];
所有元素都默认为null
。