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]
};