题
我最近一直在思考关于两者之间的差别的方式的定义阵列:
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;
来自 Java语言规范的第10.2节:
[]可以作为声明开头类型的一部分出现,也可以作为特定变量的声明者的一部分出现,或者两者兼而有之,如下例所示:
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 /文档/书籍/ JLS / second_edition / HTML / arrays.doc.html
没有区别。
从 Sun 报价:
[]
可能在声明开头作为类型的一部分出现,或作为特定变量的声明符的一部分出现,或者两者都出现,如本例所示:byte [] rowvector,colvector,matrix [];
此声明相当于:
byte rowvector [],colvector [],matrix [] [];
两者之间没有任何区别;两者都声明了一个 int
的数组。但是,前者是优选的,因为它将类型信息保存在一个地方。后者只是为了C / C ++程序员转向Java而受到支持。
没有真正的区别;但是,
double[] items = new double[10];
是首选,因为它清楚地表明该类型是一个数组。
两者都同样有效。但是不建议使用 int puzzle []
表单,根据 int [] puzzle 是首选/java/codeconvtoc-136057.html“rel =”noreferrer“>编码约定。另请参阅官方 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教程,而不是某些第三方教程。否则你最终会冒险学习不良行为。
它是一种替代的形式,这是借的 C
, ,在这java为基础。
作为一个好奇心,也有 三 定义方式的一个有效的 main
方法在java:
public static void main(String[] args)
public static void main(String args[])
public static void main(String... args)
没有区别,但Sun建议将其放在类型旁边,如这里
最优选的选项是 int [] a
- 因为 int []
是类型, a
是名称。
(你的第二个选择与此相同,空间错位)
功能上它们之间没有区别。
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[][];
因此,它们将产生完全相同的字节代码。
在Java中,这些只是表达相同内容的不同语法方法。
他们是一样的。一个比另一个更具可读性(
)它们完全等同。 int [] array
是首选样式。 int array []
仅作为等效的C兼容样式提供。
两者具有相同的含义。但是,这些变体的存在也允许这样:
int[] a, b[];
与:
相同int[] a;
int[][] b;
然而,这是一种可怕的编码风格,永远不应该这样做。
两种声明风格之间的功能没有区别。两者都声明了int的数组。
但是 int [] a
将类型信息保存在一起并且更加冗长,所以我更喜欢它。
它们是相同的,但这些陈述之间存在重要差异:
// 1.
int regular, array[];
// 2.
int[] regular, array;
in 1. regular只是一个int,而不是2.其中regular和array都是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 []整数
更合乎逻辑,因为它不允许在一个声明中创建不同类型的变量(即int和数组)(而不是C风格的声明)。