繁体   English   中英

int[] array 和 int array[] 的区别

[英]Difference between int[] array and int array[]

最近一直在思考两种定义数组的方式的区别:

  1. int[] array
  2. 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/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是名称。 (您的第二个选项与此相同,但空间放错了位置)

在功能上,它们之间没有区别。

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 数组。

但是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM