簡體   English   中英

為什么打印3 ln 8 4?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM