a) int i[] = new int[2]{1,2};
b) int[] i = new int[]{1,2,3}{4,5,6};
我知道我们不能在声明时给出数组的大小。但是在语句(a)中,我们在初始化时给出了大小。那么声明(a)如何非法而声明(b)在java中是合法的
int i1[] = new int[]{1,2};
int[][] i2 = new int[][]{{1,2,3},{4,5,6}};
int i1 [] = new int [2] {1, 2}; // Invalid
int i2 [] = new int [] {1, 2}; // Valid
int [] i3 = new int [][] {1, 2, 3} {4, 5, 6}; // Invalid
int [][] i4 = new int [][] {new int [] {1, 2, 3}, new int [] {4, 5, 6}}; // Valid
为什么不参考 Java 语言规范?
JLS 15.10 - 数组创建表达式
ArrayCreationExpression:
new PrimitiveType DimExprs Dimsopt
new ClassOrInterfaceType DimExprs Dimsopt
new PrimitiveType Dims ArrayInitializer
new ClassOrInterfaceType Dims ArrayInitializer
DimExprs:
DimExpr
DimExprs DimExpr
DimExpr:
[ Expression ]
Dims:
[ ]
Dims [ ]
请注意,这意味着带有初始值设定项的数组创建表达式只能有空括号。
数组初始值设定项在 10.6 中定义
ArrayInitializer:
{ VariableInitializersopt ,opt }
VariableInitializers:
VariableInitializer
VariableInitializers , VariableInitializer
The following is repeated from §8.3 to make the presentation here clearer:
VariableInitializer:
Expression
ArrayInitializer
两者都是违法的!
a) 您可以指定大小或内容。法律将是:
int i[] = new int[2];
i[0] = 1;
i[1] = 2;
或者
int i[] = new int[]{1,2};
b) 二维数组是包含数组的数组。所以,你必须写:
int[] i = new int[][]{{1,2,3}, {4,5,6}};
^ ^ ^
a) 提供数组初始值设定项时无法定义维度表达式 int i[] = new int[2]; b) 标记的语法错误,错误的构造 int[] j = new int[]{1,2,3};