[英]Why does this print 3 ln 8 4?
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;
注意: boolean[]
变量是对数组的引用 。 它不是数组对象,因此当您更改此引用时,您将指向另一个对象。
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的数组。
在Java中,二维数组实际上是数组的数组,而不是象某些其他语言那样分成行的字节块。
当您将数组声明为
boolean[][] values = new boolean[3][4];
这基本上只是编写的简写:
boolean[][] values = {
new boolean[4],
new boolean[4],
new boolean[4]
};
因此,您有一个数组,其元素是布尔数组。
没有什么可以阻止您更改此数组中的一项。 您有第一个数组,第二个数组和第三个数组,而您只是要替换第三个。
因此,它不会更改数组的大小,因为声明new boolean[3][4]
仅为第一维及其初始值(数组)设置固定大小。 但是,您可以根据需要用具有不同大小的新值替换这些初始值-只要您不尝试更改主数组的大小即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.