【问题标题】:Initialising a 2D array in Java [duplicate]用Java初始化二维数组[重复]
【发布时间】:2018-12-09 21:24:38
【问题描述】:
  1. 在数组中,我们可以这样初始化:

    int[] arr = {1, 2, 3, 4, 5};

  2. 但是对于二维数组,为什么下面的不正确?

    public class Main {
        public static void main(String[] args) {
           int[][] arr = new int[3][];
           arr[0] = new int[]{1,2,3}; //This is the correct way
    
           arr[0] = {1,2,3};  // ->Why this is not right? 
        }
    }
    

【问题讨论】:

标签: java arrays


【解决方案1】:

您只能在变量初始化期间使用此语法糖。 这意味着 Java 语言规范只允许 arr[0] = new int[]{1, 2, 3};int[][] arr = {{1,2,3},{1,2,3},{1,2,3}};。 区别在于第一个变体是变量赋值,第二个变体是变量初始化。

【讨论】:

  • 谢谢,但为什么我可以使用数组 int[] arr ={1,2,3};我不能在二维数组初始化中使用它?
  • 你可以这样初始化内联二维数组int[][] arr = {{1,2,3},{1,2,3},{1,2,3}};
  • @Ruizhi 检查更新的答案,希望它会带来清晰
  • 谢谢你Arashigor
【解决方案2】:

是的,你是对的,第二种创建二维数组的方法是行不通的,因为当编译器编译代码时,因为它无法确定它的类型。

【讨论】:

  • 感谢您的回答Asheesh,但是当第一行代码执行时:int[][] arr = new int[3][] 是否表明其中的所有元素都将是int 类型?
  • @Ruizhi 数组在java中是引用类型,所以当你声明像new int[3][]这样的二维数组时,这意味着它将包含一个数组,其中包含另一个int数组[null, null, null]的3个空引用
  • 是的,因为当您编写 int[ ][ ] arr 时,这意味着您将创建一个整数数组。并且 new int[3][ ] 将在运行时分配内存。
  • @Asheesh Sahu 我知道数组是 java 中的对象,内存仅通过使用 new 关键字分配给对象。但是为什么对于一维数组,允许使用简写如:int[] arr = {1 , 2 , 3 },但不允许在二维数组中使用?
  • @Arashigor 我想你解决了我的困惑,谢谢
【解决方案3】:

第二个维度的空间将仅使用代码new int [ ] { 1, 2, 3} 分配。在此之前编译器不知道数组项的类型和维度是什么。

【讨论】:

  • 感谢您的回答,但是当int[][] arr = new int[3][]; 执行时,它是否告诉编译器所有元素都是int 类型,并且是二维的
猜你喜欢
  • 1970-01-01
  • 2021-11-20
  • 2019-02-10
  • 1970-01-01
  • 2013-12-15
  • 2013-11-21
  • 1970-01-01
  • 2012-11-29
相关资源
最近更新 更多