2015-09-09 86 views
2

從我的理解在Java二維數組我知道,它可以這樣初始化:爲什麼我沒有收到ArrayIndexOutOfBoundsException異常二維數組

int a[][] = new int[3][1]; 

3->表示行

1->表示COL

如PIC:

enter image description here

我的問題是,爲什麼當我使用這個:

int a[][] = new int[3][1]; 
    a[4] =new int[]{1,2,3,3,4}; 
    System.out.print(a[4][4]); 

它給:

ArrayIndexOutOfBoundsException異常:這是正確的行爲,其中一[4],因爲指數的大小是3.

但使用這不會給任何例外:

 int a[][] = new int[3][1]; 
     a[1] = new int[]{1,2,3,3,4}; 
     a[2] = new int[]{4,5}; 
     System.out.print(a[1][4]); 

甚至壽一個1 [4]確實存在於初始化,但它是從指數作爲COL的大小等於1

任何想法!

謝謝。

回答

4

當分配

a[1] = new int[]{1,2,3,3,4}; 

a[1]現指5個元素的int數組,所以a[1][4]是有效的。它不會比原來的a[1]引用1個元素的int數組無關緊要,因爲在賦值之後a[1]引用了一個新數組。

您應該記住,二維數組實際上是一個數組數組(即元素類型爲數組的數組)。因此,您可以將新的內部數組分配給外部數組的任何索引。

0

您已經申報了[1]爲「新」,這將覆蓋數組大小計數

1

這是因爲,二維數組實際上是一個Array of Arrays

所以,當你這樣做,

int a[][] = new int[3][1]; 

它翻譯,

a[0] = new int[1]; 
a[1] = new int[1]; 
a[2] = new int[1]; 

不是,那a作爲數組只有一個維度。但是其中的每個元素都可以包含任何長度的其他數組,但int類型爲

所以,當你這樣做,

a[1] = new int[5]; 

它仍然有效。

相關問題