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

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

4

5 回答 5

3
int i1[] = new int[]{1,2};
int[][] i2 = new int[][]{{1,2,3},{4,5,6}}; 
于 2013-02-17T14:50:06.270 回答
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
于 2013-02-17T14:50:44.053 回答
2

为什么不参考 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
于 2013-02-17T14:50:58.180 回答
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}};
                     ^       ^        ^
于 2013-02-17T14:52:44.923 回答
0

a) 提供数组初始值设定项时无法定义维度表达式 int i[] = new int[2]; b) 标记的语法错误,错误的构造 int[] j = new int[]{1,2,3};

于 2013-02-17T14:52:48.470 回答