2010-06-03 87 views
13

我無法理解以下多維代碼。有人可以澄清我嗎?Java中多維數組的混亂

int[][] myJaggedArr = new int [][] 
{ 
       new int[] {1,3,5,7,9}, 
       new int[] {0,2,4,6}, 
       new int[] {11,22} 
    }; 

我可以知道它與下面的代碼有什麼不同嗎?

int[][] myArr = new int [][] { 
      {1,3,5,7,9}, 
       {0,2,4,6}, 
       {11,22} }; 

回答

7

這完全沒有什麼不同。前者只是更明確地指出你正在創建一個數組數組。

3

沒有真正的區別。只是第一個是宣佈子陣列,而第二個只是將數組的值放入陣列

2

這兩段代碼產生相同的結果。多維數組是數組的數組。

  • myArr[0][1]將返回3
  • myArr[1][1]將返回2
  • myArr[2][0]將返回11
0

完全一樣的 - 如果你更換一個與其他和編譯,你會得到字節爲 - 字節相同的class文件。自己試試!

0

這兩個代碼片段都會導致具有等效值的多維數組。

第二個片段顯示,在使用內部數組的數組文字快捷方式時,不需要顯式使用new。外部陣列也是如此。該代碼可進一步簡化爲:

int[][] myArr = { {1,3,5,7,9}, {0,2,4,6}, {11,22} }; 

Oracle Java Tutorial不顯示混合使用new申報與文字數組聲明的陣列的任何實施例。

0

從以上述方式聲明數組開始。

您可以通過聲明創建一個數組:

int [] arr = new int[3]; //(eq 1)

你可以走了一步,在陣列中與聲明中的值:

int [] arr = {0,1,2}; //(eq 2)

如果你知道你的價值觀提前,你不必創建一個int []的實例。

現在你的問題。正如其他人所說,兩者之間沒有區別,除了更清楚地表明你在做什麼之外。等效的等式2在二維數組是:

int [][] arr = {{0,1,2},{3,4,5},{6,7,8}}; //(eq 3)

注意到你怎麼不需要申報「新INT [] []」你之前開始進入價值。「{0,1,2}」是一個數組本身,所以在方程3中的第一個「{」和「last」中也是如此。事實上,在聲明arr之後,可以調用數組「{0,1 ,2} 「從由下面的語句當量3:

arr[0]; //(eq 4)

當量4相當於當量2.可以切換出簡單的 」{「 與 」新INT [] {「 或」 新INT [] [] {「。如果你想換一個換另一個,那很好,唯一真正的區別是天氣與否,它適合你的編碼風格。

爲了好玩,這裏是一個例子3維陣列短手語法:

//這是一個非常長的聲明,我不建議這樣使用它

int [][][] arr = {{{0,1,2},{3,4,5},{6,7,8}}, {{9,10,11},{12,13,14},{15,16,17}}, {{18,19,20},{21,22,23},{24,25,26}}};