Java 这怎么违法

Java 这怎么违法,java,arrays,Java,Arrays,我知道我们不能在声明时给出数组的大小。但在语句(a)中,我们给出了初始化的大小。那么,在java中,语句(a)是非法的,语句(b)是合法的,为什么不参考java语言规范呢 a) int i[] = new int[2]{1,2}; b) int[] i = new int[]{1,2,3}{4,5,6}; JLS 15.10-数组创建表达式 int i1 [] = new int [2] {1, 2}; // Invalid int i2 [] = new int [] {1, 2}; //

我知道我们不能在声明时给出数组的大小。但在语句(a)中,我们给出了初始化的大小。那么,在java中,语句(a)是非法的,语句(b)是合法的,为什么不参考java语言规范呢

a) int i[] = new int[2]{1,2};
b) int[] i = new int[]{1,2,3}{4,5,6}; 
JLS 15.10-数组创建表达式

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
请注意,这意味着带有初始值设定项的数组创建表达式只能有空括号

数组初始值设定项在10.6中定义

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 [ ]
两者都是非法的

a) 您可以指定大小或内容。 法律将是:

ArrayInitializer:
{ VariableInitializersopt ,opt }

VariableInitializers:
VariableInitializer
VariableInitializers , VariableInitializer

The following is repeated from §8.3 to make the presentation here clearer:
VariableInitializer:
Expression
ArrayInitializer

b) 二维数组是包含数组的数组。所以,你必须写:

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

再查一遍。你错了。这两种说法实际上都是无效的。是的,两种说法都是无效的(忽略了其中的大小。对于基元类型,您甚至不需要声明
new int[][]
,只要初始值设定项就足够了。
int[]i=new int[]{1,2,3};
int[]i={4,5,6};
都是有效的。为什么第一条语句无效。@Navi您应该指定数组大小,如
[2]
或像
{1,2}
这样的数组元素,但不是两者都有。实际上根本不需要
新的
操作符:
int[]i1={1,2};int[]i2={{1,2,3},{4,5,6};
int i[] = new int[2];
i[0] = 1;
i[1] = 2;
int i[] = new int[]{1,2};
int[] i = new int[][]{{1,2,3}, {4,5,6}};
                     ^       ^        ^