此问题在此处已有答案:
How to initialize an array in Java?(11个回答)
去年关闭。
1.
int[] array = new int[]{1,2,3};
int[] array = {1,2,3};
int[] array;
array = new int[]{1,2,3};
int[] array;
array = {1,2,3};
有人能解释一下为什么最后一个是错的,我们可以做#2的原因吗?
此问题在此处已有答案:
How to initialize an array in Java?(11个回答)
去年关闭。
1.
int[] array = new int[]{1,2,3};
int[] array = {1,2,3};
int[] array;
array = new int[]{1,2,3};
int[] array;
array = {1,2,3};
有人能解释一下为什么最后一个是错的,我们可以做#2的原因吗?
2条答案
按热度按时间njthzxwz1#
作为对您问题的直接回答,这是因为Java语言是以这种方式定义的。当我们声明一个新的字段或局部变量时,我们可以通过表达式(
new int[] { 1, 2, 3 }
)或数组初始化器({1,2,3})来初始化它。当赋值给一个先前声明的字段或局部变量时,我们只能使用表达式。我只能推测为什么存在这种差异,但我假设这与数组是 * 具体化 * 的事实有关,也就是说,在运行时,数组知道它的元素的类型。这意味着当你想要创建一个新数组时,你需要指定元素类型。初始化数组时,元素类型是现成的,因为数组的类型是显式指定的,但在表达式中,它不是,至少一般不是。人们当然可以尝试推断元素的类型,但语言设计者选择不这样做。
mzaanser2#
您可以自己检查编译器是如何工作的。它隐式地添加了以下构造:
字符串
数组初始化器 *,代码如下:
型
编译后变成这样:
型
参见文档:
· Java Language and Virtual Machine Specifications
· 10.6.数组初始化器
· 15.10.数组创建和访问表达式