gpt4 book ai didi

java - 为什么数组常量只能在初始值设定项中使用?

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:07 25 4
gpt4 key购买 nike

Possible Duplicate:
Arrays constants can only be used in initializers error

我正在研究数组,并且发现了这种在一行中声明和初始化数组的快捷方法。例如,

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

但是当我尝试执行以下代码时,我收到此编译器错误,提示“数组常量只能在初始化程序中使用”。

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

为什么会这样?

最佳答案

这是不允许的,因为 JLS says so 。该语法仅允许在声明和数组创建表达式中使用。

后者提供了实现相同结果的替代方法:

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

至于需要new T[]的实际根本原因,我的猜测如下。考虑以下数组初始值设定项:

{1, 2, 3, 4}

它可用于初始化不同类型的数组:

new int[]{1, 2, 3, 4};
new float[]{1, 2, 3, 4};
new double[]{1, 2, 3, 4};

如果不需要 new T[] 位,我怀疑裸露的 {1, 2, 3, 4} 可能会在语义分析过程中造成困难。在这里,我正在考虑这样的情况:

void f(float[] x) { ... }
void f(double[] x) { ... }
void g() {
f({1, 2, 3, 4});
}

如果允许这种语法,语言规范将必须处理选择调用哪个函数的复杂性。

同样,也不清楚 {null} 的类型应该是什么。它可以是Object[]Integer[]Serialized[]等等。

最后,空数组 {} 将是最棘手的。在这里,我们甚至无法判断它是一个对象数组还是一个标量数组。

语言设计者似乎没有处理所有这些复杂性,而是选择通过要求新的 T[] 语法来避免它们。

关于java - 为什么数组常量只能在初始值设定项中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44462036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com