【问题标题】:Is the following Java variable declaration valid?以下 Java 变量声明是否有效?
【发布时间】:2012-02-27 14:56:35
【问题描述】:

我错误地声明了一个字符串数组,如下:

String[] tokens[];

Eclipse 不会将此作为错误突出显示,而是认为它等同于:

String[][] tokens;

这是正确的行为还是错误?

【问题讨论】:

    标签: java eclipse syntax


    【解决方案1】:

    这是正确的行为 - 可以在对象类型 变量名称之后使用括号定义数组。

    String[] tokens;
    

    String tokens[];
    

    都是一样的。然而,编写二维数组是一种令人困惑的方式,所以我不会故意使用它;)

    如果您将数组视为对象(从技术上讲,它们是),而方括号则视为 new 关键字和空构造函数的语法糖,您可以将“错误”设想为:

    tokens = new Array<String>(new Array<String>());
    

    两者兼而有之

    String[] tokens; 
    

    String tokens[];
    

    两者都相当于

    new Array<String>();
    

    【讨论】:

      【解决方案2】:

      是的,这是正确的行为。这些是等价的:

      String[] tokens[];
      String tokens[][];
      String[][] tokens;
      

      为了清楚起见,您应该在变量类型上声明“[]”,而不是在它的名称上,但除此之外没关系。

      【讨论】:

        【解决方案3】:

        这是一个有效的声明。您也可以将其声明为String tokens[][];

        【讨论】:

          【解决方案4】:

          信任 Eclipse。以下都是等价的:

          String tokens[][];
          String[] tokens[];
          String [][]tokens;
          

          【讨论】:

            【解决方案5】:

            根据the Java tutorial,您可以(但通常不应该)在变量名后用方括号声明数组:

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

            // 不鼓励这种形式
            float anArrayOfFloats[];

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

            鉴于这一点和您的观察,可以肯定地说 Eclipse 允许您混合这些形式的声明,在您的情况下,这会产生一个数组数组。

            【讨论】:

              【解决方案6】:

              这是对 C/C++ 等旧语言的回忆。

              实际上,关于 Java 中类型检查和 JVM 的工作方式的声明

              String[][] tokens;
              

              更加连贯。

              这是因为您使用“String 对象的二维数组”类型声明 tokens,因此可以将 String[][] 视为单一类型声明。

              【讨论】:

                猜你喜欢
                • 2011-12-09
                • 2016-12-10
                • 2021-05-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-07-11
                • 1970-01-01
                相关资源
                最近更新 更多