int []数组和int数组[]之间的区别

时间:2008-09-24 19:06:13

标签: java arrays

我最近一直在考虑定义数组的两种方式之间的区别:

  1. int[] array
  2. int array[]
  3. 有区别吗?

26 个答案:

答案 0 :(得分:255)

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

int[] array更为可取,而且不那么令人困惑。

答案 1 :(得分:160)

如果您碰巧在同一声明中声明了多个变量,则会有一点不同:

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时几乎肯定会发现错误。

答案 2 :(得分:52)

没有区别。

我更喜欢type[] name格式,很明显变量是一个数组(不太注意查找它是什么)。

编辑:

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

int[] foo, bar; // both are arrays
int foo[], bar; // foo is an array, bar is an int.

答案 3 :(得分:25)

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

byte[] rowvector, colvector, matrix[];

相当于:

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

取自Java Specification。这意味着

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

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

int[] a;
int[] b;

答案 4 :(得分:23)

来自section 10.2 of the Java Language Specification

  

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

 byte[] rowvector, colvector, matrix[];
     

此声明相当于:

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

个人差不多所有我见过的Java代码使用第一种形式,通过将变量的所有类型信息保存在一个地方更有意义。我希望第二种形式不被允许,说实话......但这就是生活......

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

String[] rectangular[] = new String[10][10];

答案 5 :(得分:19)

这两个命令是相同的。

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

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

答案 6 :(得分:13)

没有区别。

引自Sun

  

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

     

此声明相当于:   byte rowvector[], colvector[], matrix[][];

答案 7 :(得分:11)

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

答案 8 :(得分:11)

没有真正的区别;但是,

double[] items = new double[10];

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

答案 9 :(得分:7)

两者都同样有效。但是,不建议使用int puzzle[]表单,int[] puzzle根据coding conventions首选byte[] anArrayOfBytes; short[] anArrayOfShorts; long[] anArrayOfLongs; float[] anArrayOfFloats; double[] anArrayOfDoubles; boolean[] anArrayOfBooleans; char[] anArrayOfChars; String[] anArrayOfStrings; 。另见官方Java arrays tutorial

  

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

float anArrayOfFloats[]; // this form is discouraged
     

您也可以将方括号放在数组的名称后面:

{{1}}
     

但是,公约不鼓励这种形式;括号标识数组类型,并应显示类型名称。

注意最后一段。

我建议阅读官方的Sun / Oracle教程,而不是某些第三方教程。否则你最终会冒险学习不良行为。

答案 10 :(得分:6)

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

作为好奇心,有三种方法在java中定义有效的main方法:

  • public static void main(String[] args)
  • public static void main(String args[])
  • public static void main(String... args)

答案 11 :(得分:5)

没有区别,但Sun建议将其放在here

所述的类型旁边

答案 12 :(得分:3)

最受欢迎的选项是int[] a - 因为int[]是类型,a是名称。 (你的第二个选择与此相同,空间错位)

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

答案 13 :(得分:3)

Java Language Specification说:

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[][];

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

答案 14 :(得分:2)

在Java中,这些只是表达相同内容的不同语法方法。

答案 15 :(得分:2)

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

请注意SonarQube将您的第二个案例视为次要代码气味:

  

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

     

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

     

不符合规范的代码示例

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

合规解决方案

int[][] matrix;   // Compliant

答案 16 :(得分:2)

它们是相同的,但这些陈述之间存在重要差异:

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

in 1. regular只是一个int,而不是2.其中regular和array都是int的数组。

因此,您的第二个陈述是首选,因为它更清楚。根据{{​​3}},也不鼓励使用第一种形式。

答案 17 :(得分:2)

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

int[] a, b[];

与:

相同
int[] a;
int[][] b;

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

答案 18 :(得分:2)

两种声明风格之间的功能没有区别。两者都声明了int的数组。

但是int[] a将类型信息保存在一起并且更加冗长,所以我更喜欢它。

答案 19 :(得分:2)

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

答案 20 :(得分:2)

他们是一样的。一个比另一个更具可读性(

答案 21 :(得分:1)

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

int[] integers; 

因为对于读取代码的任何人来说,它立即显而易见,整数是一个int的数组,而不是

int integers[];

并没有那么明显,特别是如果你在一行中有多个声明。但同样,它们是等价的,所以归结为个人偏好。

查看this page on arrays in Java以获取更多深度示例。

答案 22 :(得分: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

答案 23 :(得分:1)

是的,有区别。

int[] a = new int[100]; // 'a' 本身不是数组,数组存储为地址 内存中的其他地方,'a' 只保存那个地址

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

答案 24 :(得分:0)

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

答案 25 :(得分:0)

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