【问题标题】:Is there any difference between "Object[] x" and "Object x[]"?“Object[] x”和“Object x[]”之间有什么区别吗?
【发布时间】:2011-01-14 20:02:58
【问题描述】:

我正在更新 Java 中的旧代码库,我发现这样一行:

Object arg[] = { new Integer(20), new Integer(22) };

那行引起了我的注意,因为我习惯了这种代码:

Object[] arg = { new Integer(20), new Integer(22) };

数组的内容在这里并不重要。我很好奇变量名旁边的括号与类名旁边的括号。我在 Eclipse(使用 Java 5)中尝试过,这两行都对编译器有效。

这些声明之间有什么区别吗?

【问题讨论】:

    标签: java arrays declaration


    【解决方案1】:

    没有区别。两者都是合法的。

    你可以阅读Java语言规范http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html

    [] 可能作为类型的一部分出现 在声明的开头, 或作为声明者的一部分 特定变量,或两者兼有,如 这个例子:

    byte[] rowvector, colvector, matrix[];
    

    【讨论】:

    • 矩阵一特别邪恶.. ;)
    【解决方案2】:

    两者都是合法的并且都有效。但建议在数组名称前放置 []。

    来自Javadocs

    您也可以在数组名称之后放置方括号:

    float anArrayOfFloats[]; // this form is discouraged
    

    但是,惯例不鼓励这种形式;括号标识数组类型,并应与类型名称一起出现。

    【讨论】:

    • 将 [] 与类型放在一起更清晰;尝试将“[]”读取为“array” - int[] 读取为“int array”,而 int variableName[] 将“array”部分作为事后的想法。
    【解决方案3】:

    不,它们都有效。但请注意:

    float anArrayOfFloats[], aSecondVariable;
    

    将声明一组浮点数和一个浮点数,而:

    float[] anArrayOfFloats, aSecondVariable;
    

    将声明 两个浮点数组。

    【讨论】:

      【解决方案4】:

      简短回答:不。

      【讨论】:

        【解决方案5】:

        Integer[] ints而不是Integer ints[]的另一个好理由是因为继承关系:Integer[]Number[]的子类型Object[]的子类型。

        换句话说,您可以将Integers 放在Object 数组中,这样您就可以将[] 视为对象类型定义的一部分——这就是为什么让它接近于键入而不是对象名称。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-03-23
          • 1970-01-01
          • 1970-01-01
          • 2020-10-06
          • 2011-03-24
          • 1970-01-01
          • 2023-03-27
          相关资源
          最近更新 更多