Java 中的数组声明和初始化

coo*_*der 5 java arrays oop initialization declaration

  1. ?
    int[] array = new int[]{1,2,3};
    
    Run Code Online (Sandbox Code Playgroud)
  2. ?
    int[] array = {1,2,3};
    
    Run Code Online (Sandbox Code Playgroud)
  3. ?
    int[] array;
    array = new int[]{1,2,3};
    
    Run Code Online (Sandbox Code Playgroud)
  4. ?
    int[] array;  
    array = {1,2,3};
    
    Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么最后一个是错误的以及我们可以做 #2 的原因吗?

Hoo*_*pje 2

作为对你问题的直接回答,之所以会出现这种情况,是因为 Java 语言就是这样定义的。当我们声明一个新的字段或局部变量时,我们可以通过表达式 ( new int[] { 1, 2, 3 }) 或数组初始值设定项 ({1, 2, 3}) 来初始化它。当分配给先前声明的字段或局部变量时,我们只能使用表达式。

我只能推测为什么存在这种差异,但我认为这与数组具体化这一事实有关,也就是说,在运行时,数组知道其元素的类型。这意味着当您想要创建新数组时需要指定元素类型。初始化数组时,元素类型很容易获得,因为数组的类型是显式指定的,但在表达式中却不是,至少一般情况下不是。人们当然可以尝试推断元素的类型,但语言设计者选择不这样做。