[英]Difference between int[] array and int array[]
最近一直在思考两种定义数组的方式的区别:
int[] array
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;
[] 可以作为类型的一部分出现在声明的开头,或者作为特定变量的声明符的一部分,或者两者都出现,如下例所示:
byte[] rowvector, colvector, matrix[];
此声明等效于:
byte rowvector[], colvector[], matrix[][];
就我个人而言,我见过的几乎所有Java 代码都使用第一种形式,通过将有关变量的所有类型信息保存在一个地方更有意义。 老实说,我希望第二种形式不被允许……但这就是生活……
幸运的是,我认为我从未见过这个(有效的)代码:
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 的话:
[]
可以作为类型的一部分出现在声明的开头,或作为特定变量的声明byte[] rowvector, colvector, matrix[];
一部分,或两者兼而有之,如本例所示:byte[] rowvector, colvector, matrix[];
这个声明等价于:
byte rowvector[], colvector[], matrix[][];
两者没有任何区别; 两者都声明了一个int
数组。 然而,前者是首选,因为它将类型信息全部保存在一个地方。 后者只真正支持 C/C++ 程序员转向 Java。
没有真正的区别; 然而,
double[] items = new double[10];
是首选,因为它清楚地表明类型是数组。
两者同样有效。 然而,不鼓励使用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 教程而不是一些 3rd 方教程。 否则,您将面临学习不良做法的风险。
它是从C
借来的另一种形式,java 是基于它的。
出于好奇,在java中有3种方法可以定义有效的main
方法:
public static void main(String[] args)
public static void main(String args[])
public static void main(String... args)
没有区别,但 Sun 建议按照此处的说明将其放在类型旁边
最优选的选项是int[] a
- 因为int[]
是类型,而a
是名称。 (您的第二个选项与此相同,但空间放错了位置)
在功能上,它们之间没有区别。
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[][];
因此,它们将产生完全相同的字节码。
在 Java 中,这些只是说同一件事的不同句法方法。
他们是一样的。 一种比另一种更具可读性(对某些人而言)。
它们是完全等效的。 int [] array
是首选样式。 int array[]
仅作为等效的、与 C 兼容的样式提供。
两种声明风格在功能上没有区别。 两者都声明了 int 数组。
但是int[] a
将类型信息保存在一起并且更加冗长,所以我更喜欢它。
两者具有相同的含义。 但是,这些变体的存在也允许这样做:
int[] a, b[];
这与:
int[] a;
int[][] b;
然而,这是一种可怕的编码风格,永远不应该这样做。
它们是相同的,但这些语句之间有一个重要的区别:
// 1.
int regular, array[];
// 2.
int[] regular, array;
在 1.regular 只是一个 int,而不是 2. 其中常规和数组都是 int 的数组。
因此,您的第二个陈述是首选,因为它更清楚。 根据有关 Oracle 的本教程,也不鼓励使用第一种形式。
如前所述,没有太大区别(如果每行只声明一个变量)。
请注意, SonarQube将您的第二种情况视为次要代码异味:
数组指示符 "[]" 应该在类型上,而不是变量上 (squid:S1197)
数组指示符应始终位于类型上以提高代码可读性。 否则,开发人员必须同时查看类型和变量名才能知道变量是否是数组。
不合规的代码示例
int matrix[][]; // Noncompliant int[] matrix[]; // Noncompliant
合规解决方案
int[][] matrix; // Compliant
是的,完全一样。 就个人而言,我更喜欢
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 风格的声明相反)。
是的,有区别。
int[] a = new int[100]; // 'a' 本身不是数组,该数组作为地址存储在内存中的其他地方,而 'a' 仅保存该地址
int b[] = new int[100]; // 在创建像 cleary 这样的数组时,显示 'b' 是一个数组,它是整数类型。
没有 C 风格的数组声明。 根据谷歌编码标准,因此 int[] 数组更可取。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.