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

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

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

有区别吗?

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

int[] array更可取,而且不那么容易混淆。

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

 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捕获您的错误。

没有区别。

我更喜欢type[] name格式,很明显变量是一个数组(少看看它是什么)。

编辑:

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

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

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

 byte[] rowvector, colvector, matrix[]; 

相当于:

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

取自Java规范 。 这意味着

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

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

 int[] a; int[] b; 

从Java语言规范的10.2节 :

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

  byte[] rowvector, colvector, matrix[]; 

该声明相当于:

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

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

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

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

这两个命令是一回事。

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

 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

没有不同。

引自太阳报 :

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

此声明等效于: byte rowvector[], colvector[], matrix[][];

没有真正的区别; 然而,

 double[] items = new double[10]; 

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

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

它是一种替代forms,它是从C借用的,java是基于它的。

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

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

两者都同样有效。 然而,不鼓励使用int puzzle[]forms,根据编码约定 , 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 

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

注意最后一段。

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

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

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

function上它们之间没有区别。

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

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

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

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

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

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

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

两种声明样式之间的function没有区别。 两者都声明了int的数组。

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

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

请注意, SonarQube会将您的第二种情况视为次要代码气味:

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

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

不合规的代码示例

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

合规解决方案

 int[][] matrix; // Compliant 

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

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

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

 int[] a, b[]; 

这与:

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

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

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

 int[] integers; 

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

 int integers[]; 

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

有关更深入的示例,请查看Java中的数组页面 。

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

 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 

两个都没问题。 我建议选择一个并坚持下去。 (我做第二个)

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