int 数组和int数组之间的区别
我最近一直在思考定义数组的两种方法之间的区别:
int[] array
-
int array[]
有区别吗?
它们在语义上是相同的。 int array[]
语法仅用于帮助C程序员习惯java。
int[] array
是更可取的,而不是混淆。
如果您碰巧在同一个声明中声明了多个variables,则会有一点区别:
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
请注意,这是错误的编码风格,尽pipe编译器几乎肯定会在您尝试使用d
错误。
没有区别。
我更喜欢type[] name
格式是很明显,该variables是一个数组(less看四周找出它是什么)。
编辑:
哦,等等,有一个区别(我忘了,因为我从来没有申报多个variables在同一时间):
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 Specification 。 这意味着
int a[],b; int []a,b;
是不同的。 我不会推荐这些多个声明中的任何一个。 最容易阅读(可能)是:
int[] a; int[] b;
来自Java语言规范第10.2节 :
在本例中,[]可以作为声明开头的types的一部分,或作为特定variables的声明的一部分或两者出现:
byte[] rowvector, colvector, matrix[];
这个声明等同于:
byte rowvector[], colvector[], matrix[][];
就个人而言,几乎所有我见过的Java代码都使用了第一种forms,通过将所有有关variables的types信息保存在一个地方,更有意义。 我希望第二种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
没有不同。
从Sun引用:
[]
可以作为声明开头的types的一部分出现,或者作为特定variables的声明的一部分,或者同时出现在这个例子中:byte[] rowvector, colvector, matrix[];
这个声明相当于:
byte rowvector[], colvector[], matrix[][];
没有真正的区别; 然而,
double[] items = new double[10];
是首选,因为它清楚地表明该types是一个数组。
两者没有任何区别, 都声明一个int
数组。 然而,前者是优选的,因为它将types信息保存在一个地方。 后者只是真正支持C / C ++程序员转向Java的好处。
两者同样有效。 然而, int puzzle[]
forms是不鼓励的,根据编码规则 , int[] puzzle
是优选的。 另请参阅官方Java数组教程 :
同样,你可以声明其他types的数组:
byte[] anArrayOfBytes; short[] anArrayOfShorts; long[] anArrayOfLongs; float[] anArrayOfFloats; double[] anArrayOfDoubles; boolean[] anArrayOfBooleans; char[] anArrayOfChars; String[] anArrayOfStrings;
您也可以将方括号放在数组名称后面:
float anArrayOfFloats[]; // this form is discouraged
然而,惯例不鼓励这种forms; 括号标识数组的types,并应显示types名称。
请注意最后一段。
我build议阅读官方的Sun / Oracle教程,而不是一些第三方的教程。 否则,你将会冒险学习坏习惯。
这是从C
中借用的一种替代forms,Java是基于这种forms的。
作为一个好奇心,有三种方法可以在java中定义一个有效的main
方法:
-
public static void main(String[] args)
-
public static void main(String args[])
-
public static void main(String... args)
没有什么区别,但是Sunbuild议把它放在这里所说的types旁边
最优选的选项是int[] a
– 因为int[]
是types,而a
是名称。 (你的第二个select是这样的,错位的空间)
function上它们之间没有区别。
在Java中,这些只是说同一事物的不同语法方法。
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[][];
因此,它们将导致完全相同的字节码。
两种风格的声明在function上没有区别。 都声明int的数组。
但是int[] a
一起保存types信息,并且更详细,所以我更喜欢它。
他们是一样的,但是这些陈述之间有一个重要的区别:
// 1. int regular, array[]; // 2. int[] regular, array;
在1.常规只是一个int,而不是2.其中正则和数组是int的数组。
因此,您的第二个陈述是更好的,因为它更清楚。 根据Oracle的这个教程,第一种forms也是不鼓励的。
他们是一样的。 一个比另一个更可读(对某些人)。
它们完全相同。 int [] array
是首选样式。 int array[]
只是作为一个等效的C兼容风格提供的。
两者具有相同的含义。 但是,这些变体的存在也允许这样做:
int[] a, b[];
这是一样的:
int[] a; int[][] b;
但是,这是可怕的编码风格,不应该这样做。
是的,完全一样。 我个人更喜欢
int[] integers;
因为它使得读取你的代码的任何人立即明白整数是一个int数组,而不是
int integers[];
这并不是那么明显,特别是如果你在一行中有多个声明。 但是,它们又是相同的,所以归结为个人偏好。
有关更深入的示例,请查看Java中的数组 。
如前所述,没有多less区别(如果每行只声明一个variables)。
请注意, SonarQube将您的第二种情况视为次要代码异味:
数组指示符“[]”应该在types上,而不是variables(squid:S1197)
数组指示符应该始终位于types上以便更好地进行代码可读性。 否则,开发人员必须同时查看types和variables名称,以了解variables是否为数组。
不兼容的代码示例
int matrix[][]; // Noncompliant int[] matrix[]; // Noncompliant
兼容解决scheme
int[][] matrix; // Compliant
两者都可以。 我build议挑一个并坚持下去。 (我做第二个)
虽然int integers[]
解决scheme根源于C语言(因此可以被认为是“正常”的方法),许多人发现int[] integers
更合乎逻辑,因为它不允许创build不同types的variables(即int和数组)在一个声明(而不是C风格的声明)。
当声明单个数组引用时,它们之间没有太大的区别。 所以以下两个声明是相同的。
int a[]; // comfortable to programmers who migrated from C/C++ int[] a; // standard java notation
当声明多个数组引用时,我们可以find它们之间的区别。 以下两个陈述意思相同。 其实是由程序员来关注的。 但推荐使用标准的java符号。
int a[],b[],c[]; // three array references int[] a,b,c; // three array references