在Java中初始化布尔数组


102

我有这个代码

public static Boolean freq[] = new Boolean[Global.iParameter[2]];
freq[Global.iParameter[2]] = false;

有人可以告诉我我在这里到底在做什么错,我该如何纠正?我只需要将所有数组元素初始化为布尔型false。谢谢

Answers:


285

我只需要将所有数组元素初始化为布尔型false。

请改用任一方法,boolean[]以便所有值默认为false

boolean[] array = new boolean[size];

或者使用Arrays#fill()填充整个数组Boolean.FALSE

Boolean[] array = new Boolean[size];
Arrays.fill(array, Boolean.FALSE);

另请注意,数组索引基于零。该freq[Global.iParameter[2]] = false;行如你有会导致ArrayIndexOutOfBoundsException。要了解有关Java中数组的更多信息,请查阅此基本Oracle教程


3
当我们想将其初始化(设置为所有真值)时,第二段代码对这种情况很有用。好答案!
霸主

3
我宁愿将变量名取反,并使用带有错误值的默认初始化。
BalusC

其实,我是赞成的Boolean[] array,因为它可以让你有每个元素的三种状态:truefalsenull,这是要注意的东西是“不处理”的情况下非常有用。
Abhishek Divekar '19

20

分配数组时,该数组将初始化为false。

Java中的所有数组均初始化为该类型的默认值。这意味着将int数组初始化为0,将布尔数组初始化为false,将引用类型数组初始化为null。


12
Boolean没有使用,boolean因此默认为null
BalusC 2010年

1
正确。我没有看到。Arrays.fill应该可以解决问题。
约根·福(JørgenFogh)2010年

9

Java中的数组从0开始建立索引。因此,在您的示例中,所引用的元素在数组之外的位置为1。

可能应该像是freq [Global.iParameter [2] -1] = false;

您将需要遍历数组以初始化所有数组,此行仅初始化最后一个元素。

实际上,我非常确定Java中的布尔值默认为false,因此您可能根本不需要初始化。

最好的祝福


2
Boolean没有使用,boolean因此默认为null
BalusC 2010年

5

它们将false默认初始化为。在Java中,数组是在堆上创建的,并且根据数组的类型为数组的每个元素提供默认值。对于boolean数据类型,默认值为false


3
Boolean没有使用,boolean因此默认为null
BalusC 2010年

我本打算使用布尔值,但我的错...抱歉引起误导
leba-lev

2

公共静态布尔值freq [] = new Boolean [Global.iParameter [2]];

Global.iParameter [2]:

应该是常量值


1
这不是真的。也可以是变量。问题是您正在使用Global.iParameter [2]访问该数组。但是索引从0直到只有Global.iParameter [2] -1!
卡苏尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.