1

我正在尝试将整数数组添加到 ArrayList 中,如下所示,这不起作用:

ArrayList<int[]> myAL = new ArrayList<int[]>();

myAL.add({2,3});

但是,通过参考添加它:

ArrayList<int[]> myAL = new ArrayList<int[]>();

int[] id = {2,3};
myAL.add(id);

我相信你可以在没有引用的情况下向 ArrayList 添加简单的整数,那么为什么你不能在没有引用的情况下添加数组。

谢谢,

4

2 回答 2

2

在数组声明之外声明整数数组时,您总是需要使用匿名数组语法。此语法在数组创建表达式下的 Java 语言规范中进行了描述,并显示使用了new关键字

 ArrayCreationExpression:
    new PrimitiveType DimExprs Dimsopt
    new ClassOrInterfaceType DimExprs Dimsopt
    new PrimitiveType Dims ArrayInitializer 
    new ClassOrInterfaceType Dims ArrayInitializer

为什么

int[] id = {2,3}; // declaration

是有效的语法,而

int[] id;
id = {2,3}; // assignment - outside declaration - fails compilation

不是。因此有必要使用

myAL.add(new int[]{2,3});
于 2013-08-10T23:50:44.337 回答
0

{2, 3}是一个例子ArrayInitializer。根据 JLS:

10.6。数组初始化器

“可以在声明中指定数组初始化器(§8.3§9.3§14.4),或者作为数组创建表达式的一部分(§15.10)来创建数组并提供一些初始值。”

前三种情况用于声明变量,这不是您正在做的事情。最后一种情况对应于您正在尝试做的事情...创建一个数组实例...但是如果您查看链接部分,您会发现您需要使用 Javanew关键字来执行此操作。


那么为什么 Java 语法不允许你这样做(myAL.add({2,3});)?

好吧,我认为主要原因是{2, 3}不足以说明应该创建什么类型的数组......在所有这些情况下。

考虑一下:

    ArrayList myAL = new ArrayList();

    myAL.add({2,3});

这里适合什么样的数组?它应该是一个int[]吗?还是一个long[]?或者Integer[]?或者Object[]

要记住的另一件事是,数组初始值设定项是 Java 1.0 中 Java 语言的一部分……早在 Java 语言包括泛型类型和可能(假设)允许以合理方式解决歧义的有限类型推断之前。

于 2013-08-11T00:56:57.967 回答