Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 为什么这张照片是3层8层4层?_Java_Arrays - Fatal编程技术网

Java 为什么这张照片是3层8层4层?

Java 为什么这张照片是3层8层4层?,java,arrays,Java,Arrays,这是一道我很难回答的多项选择题。答案应该是: boolean[][] values = new boolean[3][4]; System.out.println(values.length); values[2] = new boolean[8]; System.out.println(values[2].length + " " + values[0].length); 但我认为数组的大小在创建后是无法更改的。任何解释都将不胜感激。您不是在更改数组的长度,而是在创建一个不同长度的新数组 3

这是一道我很难回答的多项选择题。答案应该是:

boolean[][] values = new boolean[3][4];
System.out.println(values.length);
values[2] = new boolean[8];
System.out.println(values[2].length + " " + values[0].length);

但我认为数组的大小在创建后是无法更改的。任何解释都将不胜感激。

您不是在更改数组的长度,而是在创建一个不同长度的新数组

3
8 4
就像写作一样

values[2] = new boolean[4]; 
assert values[2].length == 4;

values[2] = new boolean[8]; 
assert values[2].length == 8;
注意:布尔[]变量是对数组的引用。它不是数组对象,因此当您更改此引用时,将指向另一个对象

boolean[] values2 = new boolean[4]; 
assert values2.length == 4;

values2 = new boolean[8]; 
assert values2.length == 8;
。。。创建一个长度为3的数组,由名为values的变量指向。值中的三个元素都指向长度为4的数组

因此:

。。。打印3

System.out.println(values.length);
。。。创建长度为8的新数组,并使值的元素2指向该数组

曾经是值的元素2的数组不再具有引用—如果JVM停留足够长的时间,它将丢失,并将被垃圾收集清除


值[0]仍然是在开始时创建的4元素数组。values[2]是新创建的长度为8的数组。

在Java中,二维数组实际上是数组数组的数组,而不是像在其他一些语言中那样划分为行的字节块

当您将数组声明为

values[2] = new boolean[8];
这基本上只是写作的简写:

boolean[][] values = new boolean[3][4];
所以你有一个数组,它的元素是布尔数组

没有任何东西可以阻止您更改此数组中的一个条目。您有一个第一个数组、第二个数组和第三个数组,您只需替换第三个数组


因此,它不会更改数组的大小,因为声明new boolean[3][4]只为第一个维度以及其中的初始值数组设置了固定大小。但是,如果您愿意,您可以使用大小不同的新值替换这些初始值-只要您不尝试更改主数组的大小。

您不是在更改数组的长度,而是在创建一个不同长度的新值。您正在创建一个锯齿状数组。我认为这个问题没有那么糟糕。毕竟,数组被初始化为布尔[3][4],现在不再是布尔[3][4],而是参差不齐的,即布尔[3][4]。我不明白为什么这个问题被否决了这么多
boolean[][] values = new boolean[3][4];
boolean[][] values = {
     new boolean[4],
     new boolean[4],
     new boolean[4]
};