Java int[]数组和int数组[]之间的差异

Java int[]数组和int数组[]之间的差异,java,arrays,Java,Arrays,我最近一直在思考定义数组的两种方法之间的区别: int[]数组 int数组[] 有区别吗?它们在语义上是相同的。添加intarray[]语法只是为了帮助C程序员习惯java int[]array更可取,也更容易混淆。在Java中,这些只是表示相同内容的不同语法方法。它们是相同的。一个比另一个可读性更强。它们完全相同int[]数组是首选样式int-array[]只是作为等效的、与C兼容的样式提供的。没有区别,但Sun建议将其放在所解释的类型旁边。这两个命令是相同的 您可以使用以下语法声明多个对象:

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

  • int[]数组
  • int数组[]

  • 有区别吗?

    它们在语义上是相同的。添加
    intarray[]
    语法只是为了帮助C程序员习惯java


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

    在Java中,这些只是表示相同内容的不同语法方法。

    它们是相同的。一个比另一个可读性更强。

    它们完全相同<代码>int[]数组是首选样式
    int-array[]
    只是作为等效的、与C兼容的样式提供的。

    没有区别,但Sun建议将其放在所解释的类型旁边。

    这两个命令是相同的

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

    int[] arrayOne, arrayTwo; //both arrays
    
    int arrayOne[], intOne; //one array one int 
    

    请参阅:

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

    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
    时捕捉到您的错误,但两者之间没有任何区别;两者都声明了
    int
    s的数组。然而,前者是首选的,因为它将类型信息保存在一个地方。后者只有在C/C++程序员转向Java时才得到真正的支持。

    没有区别。

    引述自:

    []
    可能作为类型的一部分出现在声明的开头,或者作为特定变量的声明符的一部分出现,或者两者都出现,如本例所示:
    字节[]行向量、列向量、矩阵[]

    本声明相当于:
    字节行向量[]、列向量[]、矩阵[]


    没有区别

    我更喜欢的是
    type[]name
    格式,因为很明显变量是一个数组(不必四处寻找它是什么)

    编辑:

    哦,等等,有一点不同(我忘了,因为我一次声明的变量从来不止一个):


    没有真正的区别;但是,

    double[] items = new double[10];
    

    首选,因为它清楚地表明类型是数组。

    最首选的选项是
    int[]a
    ——因为
    int[]
    是类型,
    a
    是名称。 (您的第二个选项与此相同,但空间错位)

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


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

    不,它们是相同的。然而

    byte[] rowvector, colvector, matrix[];
    
    相当于:

    byte rowvector[], colvector[], matrix[][];
    
    byte rowvector[], colvector[], matrix[][];
    
    摘自。也就是说

    int a[],b;
    int[] a,b;
    
    它们是不同的。我不推荐这两种声明中的任何一种。最容易阅读的可能是:


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


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

    两者的含义相同。然而,这些变体的存在也允许:

    int[] a, b[];
    
    这与:

    int[] a;
    int[][] b;
    

    然而,这是一种可怕的编码风格,永远不应该这样做。

    是的,完全一样。就我个人而言,我更喜欢

    int[] integers; 
    
    因为它使任何阅读您的代码的人都能立即明白,整数是int的数组,而不是int

    int integers[];
    
    这并没有让一切变得那么明显,特别是当您在一行中有多个声明时。但同样,它们是等价的,所以归根结底是个人偏好


    查看更深入的示例。

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

    它们是一样的,但是这些陈述之间有一个重要的区别:

    // 1.
    int regular, array[];
    // 2.
    int[] regular, array;
    
    在1。正则表达式只是一个int,而不是2。其中正则和数组都是int的数组


    因此,您的第二个陈述更可取,因为它更清楚。第一种形式也不鼓励使用。

    虽然
    int integers[]
    解决方案源于C语言(因此可以被视为“正常”方法),但许多人发现
    int[]integers
    更符合逻辑,因为它不允许在一个声明中创建不同类型的变量(即int和数组)(与C风格的声明相反)。

    它是另一种形式,是从java所基于的
    C
    借用而来的

    好奇的是,有三种方法可以在java中定义有效的
    main
    方法:

    • publicstaticvoidmain(字符串[]args)
    • publicstaticvoidmain(字符串args[])
    • publicstaticvoidmain(字符串…参数)

    两者都同样有效。但是不鼓励使用
    int-puzzle[]
    形式,根据标准,首选
    int[]puzzle
    。另见官方:

    类似地,您可以声明其他类型的数组:

    byte[] anArrayOfBytes;
    short[] anArrayOfShorts;
    long[] anArrayOfLongs;
    float[] anArrayOfFloats;
    double[] anArrayOfDoubles;
    boolean[] anArrayOfBooleans;
    char[] anArrayOfChars;
    String[] anArrayOfStrings;
    
    也可以将方括号放在数组名称之后:

    float anArrayOfFloats[]; // this form is discouraged
    
    但是,惯例不鼓励使用这种形式;括号用于标识阵列类型,并应与类型名称一起出现

    注意最后一段

    我建议您阅读Sun/Oracle官方教程,而不是一些第三方教程。否则,您可能会学习到一些不好的做法。

    来自:

    []可能作为类型的一部分出现在声明的开头,或者作为特定变量的声明器的一部分出现,或者两者都出现,如本例所示:

     byte[] rowvector, colvector, matrix[];
    
    本声明相当于:

    byte rowvector[], colvector[], matrix[][];
    
    byte rowvector[], colvector[], matrix[][];
    
    就我个人而言,我所见过的几乎所有Java代码都使用第一种形式,将变量的所有类型信息保存在一个地方更为合理。老实说,我希望第二种形式不被允许……但这就是生活

    幸运的是,我认为我从未见过以下(有效)代码:

    申报时
    byte rowvector[], colvector[], matrix[][];
    
    String[] rectangular[] = new String[10][10];
    
    int a[];  // comfortable to programmers who migrated from C/C++
    int[] a;  // standard java notation 
    
    int a[],b[],c[]; // three array references
    int[] a,b,c;  // three array references
    
    int matrix[][];   // Noncompliant
    int[] matrix[];   // Noncompliant
    
    int[][] matrix;   // Compliant