Java中lenth、lenth()和size()的区别是什么?

今天做面试题遇到一道坑爹的题,某东的原题:

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()。一定要记住了!!!

原文地址:https://www.cnblogs.com/taobean/p/12364280.html