Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组分配与for循环分配_Java_Arrays_Multidimensional Array_Variable Assignment - Fatal编程技术网

Java 数组分配与for循环分配

Java 数组分配与for循环分配,java,arrays,multidimensional-array,variable-assignment,Java,Arrays,Multidimensional Array,Variable Assignment,在一个类中,我有一个私有数组 private boolean[][][] array; 这后来被宣布为 array = new boolean[2][100][100]; //* 在某一点上,我想用第一维的第二个数组覆盖第一维的第一个数组。我想这应该行得通 array[0] = array[1]; 但这导致了错误的行为。我尝试了这个简单的循环: for (int column = 0; column < array[0].length; column++) { for (in

在一个类中,我有一个私有数组

private boolean[][][] array;
这后来被宣布为

array = new boolean[2][100][100]; //*
在某一点上,我想用第一维的第二个数组覆盖第一维的第一个数组。我想这应该行得通

array[0] = array[1];
但这导致了错误的行为。我尝试了这个简单的循环:

for (int column = 0; column < array[0].length; column++) {
    for (int row = 0; row < array[0][0].length; row++) {
        array[0][column][row] = array[1][column][row];
    }
}
for(int column=0;column
这一切都如期而至

为什么第一段代码不起作用?

*第一个维度在2处是静态的,但另一个维度实际上来自另一个数组。为了清晰起见,我把它们去掉了。

这行

array[0] = array[1];
声明存储在
数组[1]
中的对象引用现在也将存储在
数组[0]
中。因为Java中的数组是一个对象引用,所以现在
array[0]
array[1]
都指向相同的位置


如果您想/需要清除数组的数据,请使用循环:
for
while
do while
,这是一个您感觉更舒服的循环。

第一段代码不起作用,因为它没有复制数组维度,而是给它添加了别名。数组是对象,因此指定将创建对同一维度的第二个引用,并将其指定给第一个维度。这就是为什么你会有一种不同的(不正确的)行为

下面是正在发生的事情的说明:

赋值从索引0处的顶部维度中删除100x100数组,并替换为对维度1处的100x100数组的引用。此时,对第一个数组的任何修改都会反映在第二个数组中,反之亦然

如果您不关心在重新分配后保留阵列的早期版本,则可以将全新的阵列分配给元素1,如下所示:

array[0] = array[1];
array[1] = new boolean[100][100];

好吧,我不认为你们可以执行拷贝,甚至一个简单的调用,除非你们以“正确的方式”寻址你们的数组

大概是

array[0]=array[1];

不起作用,但如果你写

array[0][0][0]=array[1][0][0];

我猜它会起作用,因为编译器确信您在这里谈论的是同一个数组。

顺便说一句,我不确定我是否选择了最具描述性的标题。可能是“直接阵列分配vs…”?我不确定前一个赋值是否有一个特定的名称。我猜后者只起作用,因为右侧语句的计算结果是保存在数组中的类型。
array[0][0][0]=array[1][0][0];