为什么数组常量只能在初始化程序中使用?

时间:2013-12-07 06:09:30

标签: java arrays

我正在尝试以下方法:

private int[] location=new int[3];

public void Location()
{
  this.location={1,2,3};//error is showing here
}

但是得到了编译错误,如:

  

数组常量只能用于初始化

我已经声明了数组对象并尝试为其赋值。有什么问题?

我见过Why can array constants only be used in initializers?,但这不是我要求的正确解释。

3 个答案:

答案 0 :(得分:3)

因为这是声明的语法

您可以使用数组构造函数(?)获得类似的语法:

this.location= new int[]{1,2,3};

等等,这就是链接的答案所说的..在任何情况下,这就是它是如何,但只允许更短的{..}表单 在声明中也避免了表达式 - 可以创建数组的一般复杂性。

例如,请考虑以下事项:

带有类型推断的C#允许new[] {..}更短,但Java(7)没有类型推断,因此这不适用于类型数组未显式声明。因此,在Java中添加一个特殊的表达式语法生成(例如new[] {..}{..})是没有意义的,即使一个人想要...而不继续并添加对类型推断的支持(甚至如果只是本地化到专业生产)。

声明没有此问题,因为初始化器类型固定为要声明的数组的类型。

答案 1 :(得分:1)

private int[] location;

public void location() {
    this.location = new int[] {1, 2, 3};
}   

答案 2 :(得分:1)

阵列有点特殊,请参阅language specification ,它的设计是这样的

  

每个变量初始值设定项必须与数组的组件类型进行赋值兼容(第5.2节),否则会发生编译时错误。

初始化程序表达式以{}开头,其中包含元素。

恕我直言没有告诉类型{..}编译器混淆知道它应该包含的实际类型。

表示法{..}仅适用于array的声明位置。否则,您需要数组创建表达式,即new type {..}