2014-03-28 36 views

回答

9

內存如何知道在第二條語句中需要分配多少內存給對象?

兩件事情要記住要弄清楚這是怎麼回事:

  • 2D Java數組不是方形的,他們是數組的數組。
  • 指定數組在創建時的大小。

所以在這個例子中,你要創建一個long數組(長度爲1)來保存另一個long數組 - 但你還沒有創建第二個數組(因此你不需要指定)實際上,第一個陣列爲內部陣列提供了一個空的「槽」(或者如果外部陣列長於1,則爲槽),但是內部陣列(或多個)避難所尚未創建,因此它們的大小不需要指定。

它不只是創建一個任意長度的數組,它根本不會創建任何內部數組。

您可以或許看到更清楚,如果您嘗試訪問或存儲的二維數組長:

long[][] x = new long[2][]; 
x[0][0] = 7; 

...會產生NullPointerException(第二行),因爲有是沒有內部陣列可以訪問。

在第一個沒有編譯的例子中,你試圖實際創建一個long數組,但沒有給它一個維數,因此是錯誤。

2

當你寫這篇文章 - long[][] n= new long[1][];

要創建陣列陣列long,但你實際上並不初始化那些陣列現在

所以,如果你n[0] == null將返回true

這樣你就可以自由地在任何時間點初始化新的數組later-

n[0] = new long[10];

所以問題是 - 你需要提供的尺寸,同時初始化您的數組,這就是爲什麼long[] n= new long[];是錯誤的

相關問題