size()是集合方法,length是数组属性,length()是字符串方法;集合用size(),数组用length,字符串用length(),三者不可互换。

size() 是集合的方法,length 是数组的属性
Java 中 size() 只能用在集合类上,比如 List、Set、Map 等,它返回当前集合中实际包含的元素个数。这个值是动态的,随增删操作实时变化。
length 不是方法,而是数组的公共属性,只能用于数组类型(如 int[]、String[])。它表示数组在创建时分配的固定容量,哪怕所有元素都是 null 或默认值,length 也不变。
字符串用 length(),不是 length 也不是 size()
字符串对象(String)既没有 length 属性,也不能调用 size()。它提供的是 length() 这个实例方法,用来获取字符串中 Unicode 字符的数量(包括空格、换行符等)。
-
"abc".length()→ 返回3 -
"".length()→ 返回0 -
"a\uFEFFb".length()→ 返回3(含一个零宽非断空格)
集合不能用 length,数组不能用 size()
直接写 list.length 或 arr.size() 都会编译报错。因为:
立即学习“Java免费学习笔记(深入)”;
- 数组是 Java 的原生类型,不继承自任何类,没有
size()方法 - 集合是引用类型,属于
java.util包,没有length属性 -
Map虽然不属于Collection接口,但同样支持size(),表示键值对数量
常见误用与检查建议
写代码时容易混淆三者,尤其在类型转换或泛型推导场景下。可按以下方式快速确认:
- 看到方括号声明(
new int[5]、String[] a = {...})→ 用.length - 看到
String变量 → 用.length() - 看到
ArrayList、HashSet、HashMap等 → 用.size() - IDE 报红提示 “cannot resolve symbol” 时,先看变量声明类型,再匹配对应语法










