今天做面试题遇到一道坑爹的题,某东的原题:
String str = "";
System.out.print(str.split(",").length());
问输出什么,总共三个选项:
A)0
B)1
C)编译错误
我知道他想考什么,当空字符串调用split,长度为1嘛,肯定想骗我们选A,然后我果断选C,结果答案是B!!!??
如果不知道split方法是什么可以参考我的上篇博客,请猛戳我!~
WTF!?
难道是我傻了么?数组怎么能够调用length()方法呢?我开始怀疑人生了,然后打开我的IDEA试了一下:
package packageTest;
public class Foo {
public static void main(String[] args) {
String s="";
System.out.println(s.split(",").length());
}
}
果然报错了,看来并不是我傻了,而是出题人傻了,很久之前我也被length坑过
稍微总结一下:lenth, lenth()和size()的区别吧!
1、length属性
lenth是数组的专属变量,是public static final类型的
2、length()方法
字符串查看长度则必须调用length(),有图有真相:
可以看到,返回了一个value.length
value是一个字符型数组,所以说length是数组的专用变量,length()底层还是返回的是length
我们看一下注释:
为什么字符串量长度用length()而不用Size()呢?
我们查一下海词:
length表示的是二维的多少或者距离,String正好就是一串字符,本身也是二维的东西,所以不存在空间的问题。因此使用length求长度更为合适。
3、Size()
我们再查一下海词:
可见,size表示的是一种空间的大小而非长度,空间是三维的东西,所以容器都可以使用size()方法求里面对象的多少
网上还有一种说法,使用泛型的集合都可以用size方法,为啥呢?
我们知道泛型就是限定往这个容器中装的类型,比如我只能往桶里装包子,我想知道究竟有几个包子,你说应该用length方法求桶的长度对呢还是求桶里边有多少个包子对呢?
常见容器有List/Set/Map,如果不懂容器,可以看一下马士兵老师的视频,讲得通俗易懂,安利了!
总结:
求数组长度:使用length,length是数组的属性不是方法.
求字符串长度,用length(),是方法,返回值是char数组的长度
求容器的大小,用size()。一定要记住了!!!