这怎么是非法的

时间:2013-02-17 14:46:32

标签: java arrays

a) int i[] = new int[2]{1,2};
b) int[] i = new int[]{1,2,3}{4,5,6}; 

我知道我们不能在声明时给出数组的大小。但是在声明(a)中我们给出了初始化的大小。那么声明(a)如何非法,声明(b)在java中是合法的

5 个答案:

答案 0 :(得分:3)

int i1[] = new int[]{1,2};
int[][] i2 = new int[][]{{1,2,3},{4,5,6}}; 

答案 1 :(得分:3)

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

答案 2 :(得分:1)

为什么不参考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

答案 3 :(得分:1)

两者都是非法的!

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}};
                     ^       ^        ^

答案 4 :(得分:0)

a)提供数组初始化程序时无法定义维表达式    int i [] = new int [2]; b)令牌上的语法错误,错放的构造(s)    int [] j = new int [] {1,2,3};