【问题标题】:why the compiler forbids initialization of the array? [duplicate]为什么编译器禁止初始化数组? [复制]
【发布时间】:2019-08-05 08:43:37
【问题描述】:

为什么编译器禁止初始化数组?

class Matrix {
    public int[] arr = null;
}

public class Main {
    public static void main(String[] args) {
        Matrix matrix = new Matrix();
        matrix.arr = {1, 2}; // compile error
        System.out.println(matrix.arr[0]);
    }
}

【问题讨论】:

  • 你得到什么错误?

标签: java arrays initialization


【解决方案1】:

创建数组时需要做的事情

matrix.arr = new int[]{1,2};

【讨论】:

    【解决方案2】:

    当你声明一个数组时,你可以使用语法public int[] arr = {1,2};,但是在声明之后,当你尝试在其他地方初始化它(比如在一个方法中)你不能使用你需要的简写,就像arr = new int[]{1,2};一样。

    这是因为当您声明一个数组并使用一些值public int[] arr = {1,2}; 对其进行初始化时,为数组成员(在本例中为两个)分配了空间并且以后无法修改,除非您创建一个 新数组对象 并再次将其分配给该字段。数组对象的final length 属性是在您使用数组初始化器声明它时设置的。

    但稍后当您执行arr = new int[]{1,2}; 时,您实际上是在创建一个新数组对象并分配 到已声明的字段。

    TL;DR

    数组初始化语法 {} 仅在数组声明期间允许使用,而数组构造函数语法 new type[]{} 在赋值语句中声明后允许。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-13
      • 2011-01-22
      • 2021-06-17
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      相关资源
      最近更新 更多