关于java:int []数组和int数组[]之间的区别

Difference between int[] array and int array[]

我最近一直在思考定义数组的两种方法之间的区别:

  • int[] array
  • int array[]
  • 有什么区别吗?


    它们在语义上是相同的。EDCOX1 0的语法仅被添加以帮助C程序员适应Java。

    int[] array更可取,也不容易混淆。


    如果在同一声明中声明了多个变量,则有一点不同:

    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

    注意,这是一种糟糕的编码风格,尽管在您尝试使用d时,编译器几乎肯定会捕捉到您的错误。


    没有区别。

    我更喜欢type[] name格式,很明显,变量是一个数组(不必四处查看以了解它是什么)。

    编辑:

    哦,等等,有一个区别(我忘记了,因为我从来没有一次声明多个变量):

    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
    String[] rectangular[] = new String[10][10];


    这两个命令是相同的。

    可以使用语法声明多个对象:

    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[][];


    两者之间没有任何区别;两者都声明一个int的数组。但是,前者是首选的,因为它将类型信息都保存在一个地方。后者只支持C/C++程序员移动到Java的好处。


    没有真正的区别;但是,

    1
    double[] items = new double[10];

    首选,因为它清楚地指示类型是数组。


    两者同等有效。但是,不鼓励使用int puzzle[]形式,根据编码约定,首选int[] puzzle。也参见官方Java阵列教程:

    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 discouraged

    However, 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[][];

    因此,它们将产生完全相同的字节代码。


    最优先的选择是int[] a,因为int[]是类型,a是名称。(您的第二个选项与此相同,空间位置错误)

    它们在功能上没有区别。


    如前所述,没有什么区别(如果每行只声明一个变量)。

    请注意,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[];   // Noncompliant

    Compliant Solution

    1
    int[][] matrix;   // Compliant

    两种类型的声明在功能上没有区别。两者都声明int数组。

    但是int[] a把类型信息放在一起,而且更详细,所以我更喜欢它。


    它们是相同的,但是这些说法之间有一个重要的区别:

    1
    2
    3
    4
    // 1.
    int regular, array[];
    // 2.
    int[] regular, array;

    1。正则只是一个int,而不是2。其中,正则和数组都是int的数组。

    因此,您最好使用第二个语句,因为它更清楚。根据Oracle的本教程,第一个表单也是不受欢迎的。


    它们是完全等效的。int [] array是首选样式。int array[]只是作为一种等价的C兼容样式提供的。


    它们是一样的。一个比另一个更易读(对某些人来说)。


    在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

    两者都可以。我建议你挑一个,坚持下去。(我做第二个)


    虽然int integers[]解决方案源于C语言(因此可以认为是"普通"方法),但许多人发现int[] integers更具逻辑性,因为它不允许在一个声明(而不是C样式声明)中创建不同类型的变量(即int和数组)。