关于 Java 中 length、length()、size() 的区别


以前总是觉得自己好像会了,但是某天忽然面对这个笔试题还是会恍惚一下,混淆和答错的几率也很大,不知道有没有其他人像我一样的。

所以今天把这个问题记一下,希望印象更深刻。

首先区分一下 length 和 length();

length 不是方法,是属性,数组的属性;

public static void main(String\[\] args) {
    int\[\] intArray = {1,2,3};
    System.out.println("这个数组的长度为:" + intArray.length);
}

length() 是字符串 String 的一个方法;

public static void main(String\[\] args) {
    String str = "HelloWorld";
    System.out.println("这个字符串的长度为:" + str.length());
}

进入 length() 方法看一下实现

private final char value\[\];

public int length() {
        return value.length;
    }

注释中的解释是

@return the length of the sequence of characters represented by this object.

即由该对象所代表的字符序列的长度,所以归根结底最后要找的还是 length 这个底层的属性;

size() 方法,是 List 集合的一个方法;

public static void main(String\[\] args) {
    List<String> list = new ArrayList<String>();
    list.add("a");
    list.add("b");
    list.add("c");
    System.out.println("这个list的长度为:" + list.size());
}

在 List 的方法中,是没有 length() 方法的;

也看一段 ArrayList 的源码

private final E\[\] a;

ArrayList(E\[\] array) {
       if (array==null)
             throw new NullPointerException();
       a = array;
}

public int size() {
       return a.length;
}

由这段就可以看出 list 的底层实现其实就是数组,size() 方法最后要找的其实还是数组的 length 属性;

另外,除了 List,Set 和 Map 也有 size() 方法,所以准确说 size() 方法是针对集合而言。

总结:

length——数组的属性;

length()——String 的方法;

size()——集合的方法;

谨记。


  TOC