最近一直在思考定义数组的两种方式的区别:
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
没有不同。
引用孙:
可以作为类型的
[]
一部分出现在声明的开头,或者作为特定变量的声明符的一部分,或者两者兼而有之,如下例所示:byte[] rowvector, colvector, matrix[];
这个声明等价于:
byte rowvector[], colvector[], matrix[][];
两者没有任何区别;两者都声明了一个 s 数组int
。但是,前者是首选,因为它将类型信息都保存在一个地方。后者只是为了 C/C++ 程序员转向 Java 的利益才真正得到支持。
没有真正的区别;然而,
double[] items = new double[10];
是首选,因为它清楚地表明该类型是一个数组。
C
它是一种替代形式,它是从java 所基于的中借来的。
出于好奇,在 java中定义有效方法的方法有以下三种:main
public static void main(String[] args)
public static void main(String args[])
public static void main(String... args)
两者同样有效。但是不鼓励使用这种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 教程,而不是一些第 3 方的教程。否则,您将冒着学习不良做法的风险。
没有区别,但 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. 正则只是一个 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 = 新的 int[100]; // 'a' 本身不是数组,数组作为地址存储在内存中的其他位置,而 'a' 只保存该地址
int b[] = 新的 int[100]; // 在创建像 cleary 这样的数组时,显示 'b' 是一个数组,它是整数类型。