我正在尝试将一个整数数组添加到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添加简单的整数,那么为什么你不能在没有引用的情况下添加数组。
谢谢,
答案 0 :(得分:2)
在数组声明之外声明整数数组时,总是需要使用anonymous array syntax。 Array 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:
“可以在声明(§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语言包括泛型类型和有限类型推理之前,可能(假设)允许在合理的情况下解决歧义方式。