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
但我认为数组的大小一旦创建就无法更改。任何解释都将非常感激。
答案 0 :(得分:2)
您没有更改数组的长度,而是创建一个不同长度的新数组。
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;
注意:boolean[]
变量是数组的引用。它不是数组对象,因此当您更改此引用时,您指向另一个对象。
答案 1 :(得分:2)
values = new boolean[3][4]
...创建一个长度为3的数组,由一个名为values
的变量指向。 values
中的三个元素中的每一个都指向长度为4的数组。
所以:
System.out.println(values.length);
...打印3。
values[2] = new boolean[8];
...创建一个长度为8的新数组,并使values
的元素2指向它。
以前是值的元素2的数组不再具有引用 - 它已丢失(如果JVM保持足够长的时间,它将被垃圾回收清除)。
values[0]
仍然是在开始时创建的4元素数组。 values[2]
是新创建的长度为8的数组。
答案 2 :(得分:2)
在Java中,二维数组实际上是数组的数组,而不是分成行的字节块,就像在其他一些语言中一样。
将数组声明为
时boolean[][] values = new boolean[3][4];
这基本上只是写作的简写:
boolean[][] values = {
new boolean[4],
new boolean[4],
new boolean[4]
};
所以你有一个数组,其元素是布尔数组。
没有什么可以阻止您更改此阵列中的一个条目。你有第一个数组,第二个数组和第三个数组,你只需要替换第三个数组。
因此,它不会更改数组的大小,因为声明new boolean[3][4]
仅为第一个维度设置固定大小,并为其中的初始值(数组)设置固定大小。但是,如果您愿意,可以使用具有不同大小的新值替换这些初始值 - 只要您不尝试更改主数组的大小。