布尔数组可以在For循环中初始化吗?

sag*_*e88 20 java arrays initialization

刚刚发现这个问题恰好通过初始化一个在java中初始化布尔数组的布尔数组来解决我的问题.然而,虽然它给了我可以工作的代码,但提问者并没有尝试我正在运行的代码,但是我实际上想知道为什么它不起作用.这是我尝试的代码:

Boolean[] array = new Boolean[5];
for(Boolean value : array) {
    value = false;
}
Run Code Online (Sandbox Code Playgroud)

这是其他问题的功能代码:

Boolean[] array = new Boolean[5];
Arrays.fill(array, Boolean.FALSE);
Run Code Online (Sandbox Code Playgroud)

我只是好奇为什么for循环方法不起作用?

Ste*_* P. 18

Boolean[] array = new Boolean[5];
for(Boolean value : array) {
    value = false;
}
Run Code Online (Sandbox Code Playgroud)

java增强for循环使用迭代器来遍历数组.迭代器返回对象的引用,但java按值传递引用,因此您无法更改引用指向的内容,这是您尝试执行的操作value = false.

编辑:
事实证明,对于一个普通的数组,而不是转换为List和使用迭代器,java执行以下操作:

for (int i = 0; i < array.length; i++) 
{
    Boolean value = array[i]; //here's how we get the value that's referred to 
    ...                       //in the enchanced for loop  
}
Run Code Online (Sandbox Code Playgroud)

虽然我们没有使用迭代器,但Java通过值传递引用的事实仍然解释了这里发生了什么.
编辑结束

如果这是具有某些实例成员的对象数组,则可以更改所述成员,但不能更改对象本身引用的内容.

正如其他人所建议的那样,为了解决这个问题,简单地使用常规for循环并手动将值分配给数组中的索引槽,即:

Boolean[] b_values = new Boolean[5];
for(int i = 0; i < b_values.length; i++) 
{
    b_values[i] = Boolean.FALSE; 
}
Run Code Online (Sandbox Code Playgroud)

  • 我只是发现这里的答案数量并没有真正回答这个问题. (4认同)