[英]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.