Java古怪的数组行为

为什么这有效:

int[] array = {1, 2, 3}; 

但这不是:

 int[] array; array = {1, 2, 3}; 

如果我有一个数组实例变量,我想在我的构造函数中初始化它肯定我不必去

 array = new int[3]; array[0] = 1; array[1] = 2; array[2] = 3; 

我觉得我在这里错过了一些东西?

这里的{...}构造在Java中称为数组初始化器。 这是一种特殊的速记,仅在某些语法结构中可用:

JLS 10.6arrays初始化器

可以在声明中指定数组初始值设定项,也可以将其作为数组创建表达式的一部分 ,创建数组并提供一些初始值。 […]数组初始值设定项被写为逗号分隔的表达式列表,用大括号"{""}"括起来。

如指定的那样,您只能在声明或数组创建表达式中使用此简写。

 int[] nums = { 1, 2, 3 }; // declaration nums = new int[] { 4, 5, 6 }; // array creation 

这就是以下不编译的原因:

 // DOES NOT COMPILE!!! nums = { 1, 2, 3 }; // neither declaration nor array creation, // array initializer syntax not available 

另请注意:

  • 可能会出现一个尾随的逗号; 它会被忽略
  • 如果要初始化的元素类型本身就是一个数组,则可以嵌套数组初始值设定项

这是一个例子:

  int[][] triangle = { { 1, }, { 2, 3, }, { 4, 5, 6, }, }; for (int[] row : triangle) { for (int num : row) { System.out.print(num + " "); } System.out.println(); } 

以上打印:

 1 2 3 4 5 6 

也可以看看

  • Java教程/螺母和螺栓/arrays
  • java.util.Arrays – 有许多与数组相关的实用程序方法,如equalstoString

文字语法ie {}只能在声明期间初始化时使用。

在其他地方,您可以执行以下操作:

 int[] array; array = new int[] {1, 2, 3}; 

{}是合成糖,允许您在初始化时使用值填充数组。

你也可以这样做:

 array = new int[]{1, 2, 3}; 

我不确定为什么有必要在一个版本的右侧指定类型而不在另一个版本中指定类型。

用于初始化的Curly braces {}只能在数组声明语句中使用。 您可以使用:

 int[] array = new int[] {1,2,3}; // legal 

但不是:

 array = {1, 2, 3}; //illegal 

http://www.janeg.ca/scjp/lang/arrays.html

数组是一个参考。 这意味着当你编写array int[]; 数组将等于null。 如果你想使用它,你首先需要通过array = new int[3]来分配数组,现在你可以填充它。

 array[0] = 1; array[1] = 2; 

现在,java有两个语法糖用于填充数组。 你可以写arr int[] = {1,2,3}或者arr int[] = new int[]{1,2,3}

Java将在场景后面分配并填充它,但这只能在减速时实现。