【问题标题】:What's the difference between length and length()? [duplicate]长度和长度()有什么区别? [复制]
【发布时间】:2011-12-30 02:41:57
【问题描述】:

我注意到,在计算数组长度时,您会写如下内容:

arrayone.length;

但是,对于数组列表或字符串之类的东西,你要在末尾写一个括号,例如String的长度如下:

stringone.length();

造成这种情况的主要原因是什么?你怎么知道什么时候放括号还是现在放括号?

【问题讨论】:

    标签: java arrays string


    【解决方案1】:
    .length;
    

    直接访问字段成员。

    .length();
    

    调用方法(即访问器)来访问字段成员。

    对于String,这是意料之中的,因为它是不可变的。

    【讨论】:

      【解决方案2】:

      Arrays 的处理方式不同于 Strings 或 ArrayLists 或其他任何可以在 Java 中计算的内容。 Array 几乎是一个原生类型,它的长度在初始化后永远不会改变,所以不需要封装。长度变量可以直接暴露,没有副作用。

      String 使用方法而不是变量的原因是因为它在内部使用了不想公开暴露的char[](为了不变性/封装),所以它将长度变量包装在 @ 987654327@ 方法。这与ArrayList 具有size() 方法而不是length 变量的原因相同。

      您将使用变量而不是方法的唯一一次是使用数组。其他一切都是方法。也就是说,除了数组之外,您将对所有内容都使用方括号。

      【讨论】:

        【解决方案3】:

        知道何时使用哪一个的唯一真正方法是经验。虽然具有自动完成功能的 IDE 通常会在您不记得时帮助您。

        在大多数情况下(并非总是)array.length、System.out 和 System.err 是最常见的 3 个,它们实际上是成员访问而不是方法调用。

        【讨论】:

          【解决方案4】:
          int[] myArray = new int[10];
          String myString = "hello world!";
          List<int> myList = new ArrayList<int>();
          
          myArray.length    //gives the length of the array
          myString.length() //gives the length of the string
          myList.size()     //gives the length of the list
          

          字符串和数组很可能是在不同的时间设计的,因此最终使用了不同的约定。一个理由是,由于字符串在内部使用数组,因此使用方法 length() 来避免重复相同的信息。最终,这只是一种不一致的演变,如果从头开始重新设计语言,肯定会解决这个问题。 :D

          【讨论】:

          • 没有。并不是说它们是在不同时期设计的。任何有size
          【解决方案5】:

          主要区别在于,在 A) 第一种情况下,它的数组类型,例如 int[]、Object[]、double[] 等,它有一个名为 lenght 的公共字段,而 B) 第二种情况是 Object具有称为length() 的函数的字符串,该函数可以称为getLength() 或其他名称。数组类型的公共字段长度可能是 C++ 做事方式的遗留物。

          数组类型有以下几种:

          • 公共最终字段长度,其中包含的数量 数组的组成部分(长度可以是正数或零)
          • 公共方法克隆,覆盖同名方法 在 Object 类中并且不抛出任何已检查的异常
          • 继承自Object类的所有成员;唯一的方法 不被继承的对象是它的克隆方法

          看看this, Array Types。

          【讨论】:

            【解决方案6】:

            .length() 是 String 类的一个方法,它返回字符串中的字符数。

            .length 将给出存储在数组中的元素数。

            public class length
            {
            public static void main(String args[])
            {
            String x="test";
            int a[]={1,2,3,4};
            System.out.println(x.length());
            System.out.println(a.length);
            }
            }
            
            // output
            4
            4
            

            【讨论】:

              【解决方案7】:

              length 是一个伪数据成员引用,仅适用于 (small-a) 数组(忽略您可能定义的实现该成员的类)。

              其他一切都是类的对象,所有具有此概念的 JDK 类都定义了 length() 或 size() 实例方法。 (我真希望他们能始终如一地选择其中一个,但那是桥上的水。)

              【讨论】:

                【解决方案8】:

                Array.length 是 Array 的属性,类似于变量引用。

                ArrayList.size() 是对数组列表对象的实际方法调用。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-05-22
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-03-02
                  • 1970-01-01
                  相关资源
                  最近更新 更多