繁体   English   中英

Java中的数组声明和初始化

[英]Array declaration and initialization in Java

  1.  int[] array = new int[]{1,2,3};
  2.  int[] array = {1,2,3};
  3.  int[] array; array = new int[]{1,2,3};
  4.  int[] array; array = {1,2,3};

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

作为对您问题的直接回答,之所以如此,是因为 Java 语言是以这种方式定义的。 当我们声明一个新字段或局部变量时,我们可以通过表达式 ( new int[] { 1, 2 3 } ) 或数组初始化器 ({1, 2, 3}) 对其进行初始化。 当分配给先前声明的字段或局部变量时,我们只能使用表达式。

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

你可以自己检查编译器是如何工作的。 它隐式地添加了这个结构:

new int[]

数组初始值设定项,这段代码:

int[] array = {1, 2, 3};

编译后变成这个:

int[] array = new int[]{1, 2, 3};

请参阅文档:
Java 语言和虚拟机规范
10.6。 数组初始化器
15.10。 数组创建和访问表达式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM