【问题标题】:Why does the multidimensional array syntax work为什么多维数组语法有效
【发布时间】:2020-02-01 08:25:16
【问题描述】:

当我们创建像int[][] a = new int[2][3] 这样的二维数组时,为什么生成的二维数组由一个包含三元素 int 数组的二元素数组组成,而不是相反。我感到困惑的原因是,当我们做一个数组时,我们做的是datatype[],那么当我们做int[2][3]的时候,为什么不把三个int[2]数组放到一个有三个点的数组中(来自[3])。

【问题讨论】:

  • 简单地说,数组的类型不是维度结构的一部分。所以它不像(int[2])[3] 那样思考,而是一个[2][3] 数组(2 x 3),类型为int。实际上,您可以通过自己使用模数和乘法来支持多个维度,然后 2x3 或 3x2(在一维数组中)几乎没有区别。至于 为什么 java 以这种方式设计它,您将在一些非常古老的邮件列表中挖掘...

标签: java arrays multidimensional-array


【解决方案1】:

它在 Java 中的实现方式更符合逻辑。考虑数组元素访问表达式:a[x][y]。目前,它可以很好地分解为(a[x])[y],这意味着“我们得到a 的第x 个元素,然后我们得到结果的第y 个元素”。所以想象一下,如果new int[2][3] 生成了一个包含三个元素的数组,每个元素都是一个二元素数组。那么x 应该在 0..2 范围内,y 应该在 0..1 范围内,这与数组创建点使用的维度顺序相反。那绝对会令人困惑。

【讨论】:

    【解决方案2】:

    我猜你的逻辑是有道理的。尽管您也可以争论,但写 int[2][3] 的意思是“第一个索引可以有 2 个不同的值,第二个是 3”,这与它的实际工作方式相同。

    最后,这只是规范和编译器构建的问题。而且由于它是以这种方式而不是那种方式指定的,因此它是以这种方式实现和工作的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      相关资源
      最近更新 更多