记某一次刷题:
计算下字符串的长度,哦哦简单嘛,然后一写
int len=str.length;
咦?怎么报错了,那再加上**()括号**试试把
int len=str.length();
编译通过了,好的,下次一定要记得**length()**后面是要加括号的!!!!
不久之后一题:
计算以下数组nums长度,哦哦简单的
int length=nums.length();
编译失败。。咦?我上次明明记得length后面是要加括号的呀,难道是我记错了?算了,那再试试没有括号的把
int length=nums.length;
编译通过,哦~~那我一定是上次记错了,length后面是不要加括号()的!!!
以后就是无限循环
…
…
…
所以length和length()到底谁是正确的呢??
==其实两者都是正确的!==是不是更加很困惑了,怎么可能两个都正确呢!?
其实要搞清楚那个正确,首先要弄清楚后面的**括号()**代表什么含义:
java中什么后面会跟着括号呢?对了,只有方法后面的参数栏会存在括号,所以也就是length()是string类的一个方法method!!
只要是java中的方法,不管这个方法有没有入口参数,后面一定是要存在这个括号()的。
原来如此,那为什么也会有不存在括号的length呢?
原因就是length是数组中的一个属性field,调用时就直接是对象名.属性名后面无需加括号()!
综上所述,总结如下:
1.*带括号()*的均是java中的方法method,length()就是String类的一个method所以有括号
2.不带括号的是类的属性field,比方说penson.name,length就是数组类的一个属性所以不需要括号
size()又是什么情况?
搞清楚了length和length(),那为什么求长度还有用size()的?真是傻傻分不清!
根据之前所述,首先明确size()肯定是一个方法。那为什么不用length(),要单独起一个新的名字呢?
size()是针对泛型集合LIst说的,因为数组是静态的在初始化的时候JVM就会为起分配相应的内存大小,但是List是动态的,其没有length的属性。所以java专门提供了size()方法用来计算集合的长度大小。为了以示区别所以叫做size()!(个人猜测,哈哈不对当我没说。)
如果看到泛型或者集合有多少个元素,记得调用size()方法来查看!