Difference between int[] array and int array[]
我最近一直在思考定义数组的两种方法之间的区别:
有什么区别吗?
它们在语义上是相同的。EDCOX1 0的语法仅被添加以帮助C程序员适应Java。
如果在同一声明中声明了多个变量,则有一点不同:
1 2 | 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 |
注意,这是一种糟糕的编码风格,尽管在您尝试使用
没有区别。
我更喜欢
编辑:
哦,等等,有一个区别(我忘记了,因为我从来没有一次声明多个变量):
1 2 | int[] foo, bar; // both are arrays int foo[], bar; // foo is an array, bar is an int. |
不,这些是一样的。然而
1 | byte[] rowvector, colvector, matrix[]; |
相当于:
1 | byte rowvector[], colvector[], matrix[][]; |
从Java规范中获取。那意味着
1 2 | int a[],b; int[] a,b; |
是不同的。我不推荐这两种声明中的任何一种。最容易阅读的可能是:
1 2 | int[] a; int[] b; |
来自Java语言规范的第10.2节:
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:
1 byte[] rowvector, colvector, matrix[];This declaration is equivalent to:
1 byte rowvector[], colvector[], matrix[][];
就我个人而言,几乎所有我见过的Java代码都使用第一个表单,通过将变量的所有类型信息保存在一个地方,这就更有意义了。老实说,我真希望第二张表格不被允许。但这就是生活…
幸运的是,我认为我从未见过这个(有效的)代码:
这两个命令是相同的。
可以使用语法声明多个对象:
1 2 3 | 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
没有区别。
太阳报:
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 | double[] items = new double[10]; |
首选,因为它清楚地指示类型是数组。
两者同等有效。但是,不鼓励使用
Similarly, you can declare arrays of other types:
1
2
3
4
5
6
7
8 byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;You can also place the square brackets after the array's name:
1 float anArrayOfFloats[]; // this form is discouragedHowever, convention discourages this form; the brackets identify the array type and should appear with the type designation.
注意最后一段。
我建议阅读官方的Sun/Oracle教程,而不是一些第三方教程。否则你会冒着学习坏习惯的风险。
它是一种替代形式,它是从基于Java的EDCOX1 0中借用的。
作为一种好奇,在Java中定义三种有效的EDOCX1 1方法的方法有:
public static void main(String[] args) public static void main(String args[]) public static void main(String... args)
没有区别,但Sun建议将其放在此处解释的类型旁边
Java语言规范称:
1 2 3 4 5 6 7 8 9 | 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[][]; |
因此,它们将产生完全相同的字节代码。
最优先的选择是
它们在功能上没有区别。
如前所述,没有什么区别(如果每行只声明一个变量)。
请注意,Sonarkube将您的第二个案例视为轻微的代码气味:
Array designators"[]" should be on the type, not the variable (squid:S1197)
Array designators should always be located on the type for better code
readability. Otherwise, developers must look both at the type and the
variable name to know whether or not a variable is an array.Noncompliant Code Example
1
2 int matrix[][]; // Noncompliant
int[] matrix[]; // NoncompliantCompliant Solution
1 int[][] matrix; // Compliant
两种类型的声明在功能上没有区别。两者都声明int数组。
但是
它们是相同的,但是这些说法之间有一个重要的区别:
1 2 3 4 | // 1. int regular, array[]; // 2. int[] regular, array; |
1。正则只是一个int,而不是2。其中,正则和数组都是int的数组。
因此,您最好使用第二个语句,因为它更清楚。根据Oracle的本教程,第一个表单也是不受欢迎的。
它们是完全等效的。
它们是一样的。一个比另一个更易读(对某些人来说)。
在Java中,这些只是简单的不同的语法方法。
两者的含义相同。然而,这些变体的存在也允许:
1 | int[] a, b[]; |
同:
1 2 | int[] a; int[][] b; |
然而,这是可怕的编码风格,不应该这样做。
是的,完全一样。我个人比较喜欢
1 | int[] integers; |
因为它使任何阅读您的代码的人都能立即发现整数是一个int数组,而不是
1 | int integers[]; |
这并不能让事情变得那么明显,尤其是在一行中有多个声明的情况下。但同样,它们是等价的,所以归根结底是个人偏好。
为了更深入的例子,在Java中的数组中查看这个页面。
声明单个数组引用时,它们之间没有太大的区别。所以下面两个声明是相同的。
1 2 | int a[]; // comfortable to programmers who migrated from C/C++ int[] a; // standard java notation |
当声明多个数组引用时,我们可以发现它们之间的区别。以下两个语句的含义相同。事实上,这取决于程序员的选择。但是建议使用标准的Java符号。
1 2 | int a[],b[],c[]; // three array references int[] a,b,c; // three array references |
两者都可以。我建议你挑一个,坚持下去。(我做第二个)
虽然