Java中两种数组声明方式有什么区别?

10

在我的书里,他们一直在以下两种方法之间切换声明数组的方式:

    int array1[] = {1, 2, 3};
    int[] array2 = {1, 2, 3};

我想知道两个括号的位置有什么区别,为什么当我把括号放在名称后面时(比如在array1中),我必须初始化它为一组值或一个新数组,但是在array2中,我可以简单地说“int[] array2;”然后稍后再使用它...?


什么也没有。两者在初始化时是等价的。第二种更受欢迎,但第一种是为了老式 C 程序员而保留的。 - Hot Licks
它们是等价的。同时,int[][] array1int[] array1[]int array1[][]也是等价的。 - Eng.Fouad
3个回答

7
除了你提到如果在名称后面加上方括号就必须初始化它之外,它们是相同的。在名称之前声明的一个优点是可以进行多个数组初始化,如下所示:
int [] myArray1, myArray2;

int myArray1[], myArray2[];

根据文档,Java的做法是将方括号放在数组名称前面。

是的,但为什么?如果第一个示例没有后续初始化,很难确定它应该是一个数组吗? - StriplingWarrior
那么,你会说第二个数组声明更好,只是因为它提供了更多的灵活性吗? - Alper
@Jacob 是的,它确实提供了更多的灵活性,并且根据文档所述是首选方式,当您初始化多个数组时也有所不同。 - Oscar Gomez
1
@StriplingWarrior 我不确定这个,但另一种形式显然是为了让学习Java的其他程序员更容易理解,从而友好于C语言。 - Oscar Gomez
3
int[] 表示一种类型。使用这种表示法时,与 C 风格表示法不同的是,类型的位不会被分隔开。 - Hot Licks

1

它们之间没有区别,因为它们都声明了一个类型为"int数组"的变量。虽然文档中在变量名前使用方括号声明数组,但并没有所谓的"Java方式"(只有首选方式):

int[] array1;

注意:请注意,“声明”不是“初始化”(或实例化

int[] array1;   // declares an array of int named "array1"
                // at this point, "array1" is NOT an array, but null
                // Thus we "declare" a variable that will hold some 
                // data of type int[].

array1 = new int[] {1, 2, 3};   // legacy initialization; set an array of int
                                // with 3 values to "array1". Thus, we "initialize"
                                // the variable with some data of type int[]

因此,

int [] array1;
int array2[];

两者都声明了两个类型为int[]的变量;然而,它们只是数据类型的声明,并不是数组。就像Oscar Gomez所说的那样,现在的区别在于第二种“方式”需要您指定变量是数组类型,而不仅仅是int。

int i[], j;   // i is a data type array of int, while j is only an int
int [] k, l;  // both k and l are of the same type: array of int

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接