256

最近一直在思考定义数组的两种方式的区别:

  1. int[] array
  2. int array[]

有区别吗?

4

26 回答 26

311

它们在语义上是相同的。添加语法只是为了int array[]帮助 C 程序员习惯 java。

int[] array更可取,而且更少混乱。

于 2008-09-24T19:08:05.550 回答
187

如果您碰巧在同一个声明中声明了多个变量,则存在细微差别:

int[] a, b;  // Both a and b are arrays of type int
int c[], d;  // WARNING: c is an array, but d is just a regular int

请注意,这是一种糟糕的编码风格,尽管编译器几乎肯定会在您尝试使用d.

于 2008-09-24T19:12:35.650 回答
59

没有区别。

我更喜欢的type[] name格式很明显,变量是一个数组(少环顾四周以找出它是什么)。

编辑:

哦等等有区别(我忘记了,因为我一次从不声明多个变量):

int[] foo, bar; // both are arrays
int foo[], bar; // foo is an array, bar is an int.
于 2009-02-25T19:59:44.937 回答
31

不,这些都是一样的。然而

byte[] rowvector, colvector, matrix[];

相当于:

byte rowvector[], colvector[], matrix[][];

取自Java 规范。这意味着

int a[],b;
int[] a,b;

是不同的。我不会推荐这些多重声明中的任何一个。最容易阅读的(可能)是:

int[] a;
int[] b;
于 2010-10-02T14:16:28.367 回答
28

Java 语言规范的第 10.2 节

[] 可以作为类型的一部分出现在声明的开头,或者作为特定变量的声明符的一部分,或者两者兼而有之,如下例所示:

 byte[] rowvector, colvector, matrix[];

这个声明等价于:

byte rowvector[], colvector[], matrix[][];

就我个人而言,我见过的几乎所有Java 代码都使用第一种形式,通过将有关变量的所有类型信息保存在一个地方,这更有意义。老实说,我希望第二种形式被禁止……但这就是生活……

幸运的是,我认为我从未见过这个(有效的)代码:

String[] rectangular[] = new String[10][10];
于 2011-09-22T21:50:33.450 回答
22

这两个命令是一回事。

您可以使用语法来声明多个对象:

int[] arrayOne, arrayTwo; //both arrays

int arrayOne[], intOne; //one array one int 

见:http: //java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html

于 2008-09-24T19:10:48.930 回答
14

没有不同。

引用

可以作为类型的[]一部分出现在声明的开头,或者作为特定变量的声明符的一部分,或者两者兼而有之,如下例所示:byte[] rowvector, colvector, matrix[];

这个声明等价于: byte rowvector[], colvector[], matrix[][];

于 2009-01-18T10:30:50.930 回答
12

两者没有任何区别;两者都声明了一个 s 数组int。但是,前者是首选,因为它将类型信息都保存在一个地方。后者只是为了 C/C++ 程序员转向 Java 的利益才真正得到支持。

于 2009-01-18T10:29:06.407 回答
12

没有真正的区别;然而,

double[] items = new double[10];

是首选,因为它清楚地表明该类型是一个数组。

于 2009-02-25T20:00:57.070 回答
8

C它是一种替代形式,它是从java 所基于的中借来的。

出于好奇,在 java中定义有效方法的方法有以下三种:main

  • public static void main(String[] args)
  • public static void main(String args[])
  • public static void main(String... args)
于 2011-09-22T21:48:21.853 回答
8

两者同样有效。但是不鼓励使用这种int puzzle[]形式,int[] puzzle根据编码约定,最好使用这种形式。另请参阅官方Java 数组教程

同样,您可以声明其他类型的数组:

byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;

您还可以在数组名称之后放置方括号:

float anArrayOfFloats[]; // this form is discouraged

然而,惯例不鼓励这种形式;括号标识数组类型,并应与类型名称一起出现。

注意最后一段。

我建议阅读官方的 Sun/Oracle 教程,而不是一些第 3 方的教程。否则,您将冒着学习不良做法的风险。

于 2011-09-22T21:48:59.950 回答
5

没有区别,但 Sun 建议将其放在此处解释的类型旁边

于 2008-09-24T19:09:33.677 回答
3

最首选的选项是int[] a- 因为int[]是类型,并且a是名称。(您的第二个选项与此相同,但空间错位)

从功能上讲,它们之间没有区别。

于 2010-10-02T14:13:33.290 回答
3

Java 语言规范说:

The [] may appear as part of the type at the beginning of the declaration,
or as part of the declarator for a particular variable, or both, as in this
example:

byte[] rowvector, colvector, matrix[];

This declaration is equivalent to:

byte rowvector[], colvector[], matrix[][];

因此它们将产生完全相同的字节码。

于 2010-10-02T14:14:31.853 回答
2

在 Java 中,这些只是说同一件事的不同语法方法。

于 2008-09-24T19:08:05.690 回答
2

他们是一样的。一个比另一个更具可读性(对某些人来说)。

于 2008-09-24T19:08:18.420 回答
2

它们是完全等价的。 int [] array是首选风格。 int array[]仅作为等效的 C 兼容样式提供。

于 2008-09-24T19:08:55.143 回答
2

两种声明风格在功能上没有区别。两者都声明了 int 数组。

但是int[] a 将类型信息保持在一起并且更详细,所以我更喜欢它。

于 2010-10-02T14:18:11.793 回答
2

两者具有相同的含义。但是,这些变体的存在也允许这样做:

int[] a, b[];

这与以下内容相同:

int[] a;
int[][] b;

然而,这是一种可怕的编码风格,永远不应该这样做。

于 2010-10-02T14:18:46.430 回答
2

它们是相同的,但这些语句之间有一个重要的区别:

// 1.
int regular, array[];
// 2.
int[] regular, array;

1. 正则只是一个 int,而 2. 正则和数组都是 int 的数组。

因此,您的第二个陈述是首选,因为它更清楚。根据Oracle 上的本教程也不鼓励使用第一种形式。

于 2010-10-24T10:07:18.310 回答
2

如前所述,没有太大区别(如果每行只声明一个变量)。

请注意,SonarQube将您的第二种情况视为轻微的代码异味:

数组指示符“[]”应该在类型上,而不是变量上 (squid:S1197)

数组指示符应始终位于类型上,以获得更好的代码可读性。否则,开发人员必须同时查看类型和变量名才能知道变量是否为数组。

不合规代码示例

int matrix[][];   // Noncompliant
int[] matrix[];   // Noncompliant

合规解决方案

int[][] matrix;   // Compliant
于 2017-01-25T15:21:19.803 回答
1

是的,完全一样。就个人而言,我更喜欢

int[] integers; 

因为它使任何阅读您的代码的人都立即明白整数是一个 int 数组,而不是

int integers[];

这并不那么明显,特别是如果您在一行中有多个声明。但同样,它们是等价的,所以这取决于个人喜好。

查看这个关于 Java 数组的页面,了解更深入的示例。

于 2010-10-24T10:03:55.847 回答
1

在声明单个数组引用时,它们之间没有太大区别。所以以下两个声明是相同的。

int a[];  // comfortable to programmers who migrated from C/C++
int[] a;  // standard java notation 

在声明多个数组引用时,我们可以发现它们之间的区别。以下两个陈述意思相同。实际上,由程序员决定跟随哪个。但建议使用标准的 java 表示法。

int a[],b[],c[]; // three array references
int[] a,b,c;  // three array references
于 2017-01-04T07:43:34.080 回答
0

两者都可以。我建议选择一个并坚持下去。(我做第二个)

于 2010-10-24T10:03:57.713 回答
0

虽然int integers[]解决方案源于 C 语言(因此可以被认为是“正常”方法),但许多人发现int[] integers它更合乎逻辑,因为它不允许在一个声明中创建不同类型的变量(即 int 和数组)(而不是C 风格的声明)。

于 2010-10-24T11:50:38.067 回答
0

是的,有区别。

int[] a = 新的 int[100]; // 'a' 本身不是数组,数组作为地址存储在内存中的其他位置,而 'a' 只保存该地址

int b[] = 新的 int[100]; // 在创建像 cleary 这样的数组时,显示 'b' 是一个数组,它是整数类型。

于 2021-05-10T05:57:00.063 回答