无法将int []类型添加到ArrayList

时间:2013-08-10 23:47:53

标签: java reference arraylist integer

我正在尝试将一个整数数组添加到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添加简单的整数,那么为什么你不能在没有引用的情况下添加数组。

谢谢,

2 个答案:

答案 0 :(得分:2)

在数组声明之外声明整数数组时,总是需要使用anonymous array syntaxArray Creation Expressions下的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});

答案 1 :(得分:0)

您的{2, 3}ArrayInitializer的示例。根据JLS:

  

10.6. Array Initializers

     

“可以在声明(§8.3§9.3§14.4)中指定数组初始值设定项,也可以将其作为数组创建表达式的一部分(§15.10 ),创建一个数组并提供一些初始值。“

前三个案例用于声明变量,而这不是你正在做的事情。最后一个案例对应于你要做的事情......创建一个数组实例......但是如果你看一下链接部分,你会看到你需要使用Java new关键字来做这件事。 / p>


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

嗯,我认为主要原因是{2, 3}不足以说明应该在所有这样的背景下创建什么类型的数组。

考虑一下:

    ArrayList myAL = new ArrayList();

    myAL.add({2,3});

这里适合哪种阵列?应该是int[]吗?还是long[]?还是Integer[]?或Object[]

要记住的另一件事是数组初始化器是Java 1.0中Java语言的一部分......在Java语言包括泛型类型和有限类型推理之前,可能(假设)允许在合理的情况下解决歧义方式。