以前总是觉得自己好像会了,但是某天忽然面对这个笔试题还是会恍惚一下,混淆和答错的几率也很大,不知道有没有其他人像我一样的。
所以今天把这个问题记一下,希望印象更深刻。
首先区分一下 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()——集合的方法;
谨记。