Java中多维数组的混淆

时间:2010-06-03 17:16:43

标签: java arrays multidimensional-array

我无法理解以下多维代码。有人可以澄清一下吗?

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} };

6 个答案:

答案 0 :(得分:7)

根本没有什么不同。前者只是让你更明确地创建一个数组数组。

答案 1 :(得分:3)

没有真正的区别。第一个是声明子数组,而第二个只是将数组的值放入数组

答案 2 :(得分:2)

这两段代码产生相同的结果。

多维数组是数组的数组。

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

答案 3 :(得分:0)

完全相同 - 如果你用另一个替换并编译,你将获得逐字节相同的class文件。亲自试试吧!

答案 4 :(得分:0)

这两个代码片段都会产生具有等效值的多维数组。

第二个片段显示在使用内部数组的数组文字快捷方式时,不需要显式使用new。对于外部阵列也是如此。此代码可以进一步简化为:

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

Oracle Java Tutorial没有显示混合使用new来声明数组与文字数组声明的任何示例。

答案 5 :(得分:0)

从以上述方式开始声明数组开始。

您可以通过声明:

来创建数组

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

您可以通过声明数组中的值来更进一步:

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

如果您提前知道自己的值,则不必创建int []的实例。

现在回答你的问题。正如其他人所说,这两者之间没有区别,只是更清楚地了解你在做什么。相当于eq。二维数组中的2是:

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

注意在开始输入值之前,如何不需要声明“new int [] []”。 “{0,1,2}”是一个数组本身,所以在eq 3中第一个“{”和last}中的所有其他内容。事实上,在声明arr之后,你可以调用数组“{0,1 ,2}“来自以下陈述的方程3:

arr[0]; //(eq 4)

eq 4相当于eq 2.你可以用“new int [] {”或“new int [] [] {”切换出简单的“{”。如果你想换一个用于另一个,那很好,唯一真正的区别是天气与否,它符合你的编码风格。

为了好玩,这里是一个简短语法的三维数组的例子:

//这是一个非常长的陈述,我不建议以这种方式使用它

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}}};