Java如何获取数组和字符串的长度(length还是length())
限时1秒钟给出答案,来来来,听我口令:“Java如何获取数组和字符串的长度?length还是length()?”
在逛programcreek的时候,我发现了上面这个主题。说实话,我当时脑海中浮现出了这样一副惊心动魄的画面:
面试官老马坐在我的对面,地中海式的发型令我敬佩有加。尽管略显疲惫,但他仍然自信地向我抛出了上面这个问题。稍稍迟疑了一下,我回答说:“数组用length,字符串用length跟上小括号”。老马不愧是面试中的高手,一瞬间就从我的回答中捕获到了不自信。我能感受得出来,因为我看到老马的嘴角微微地动了一下,似乎想要咂咂嘴。但出于对于我的礼貌,他克制住了。
到底该用length还是length(),说真的,我当时真有点吃不准,怀念IDE的代码自动提醒功能啊!
int[]arr=newint[4]; System.out.println(arr.length);//获取数组的长度 Stringstr="沉默王二"; System.out.println(str.length());//获取字符串的长度
按理说,数组和字符串都是对象,访问长度都用length()方法就好了。为什么数组偏偏剑走偏锋用的length字段呢?
首先呢,我们必须要明白:数组是一个容器,当它被创建后,不仅元素的类型是确定的,元素的个数也是确定的。换句话说,数组的长度是确定的,不可能再变长或者变短。因此,数组可以使用一个字段(length)来表示长度。
创建数组的方法有两种,这个应该大家都知道了。一种是通过new关键字创建指定长度后再赋值,另外一种是通过{}直接进行初始化。
//new int[]arr=newint[4]; arr[0]=0; arr[1]=1; arr[2]=2; arr[3]=3; //{} int[]arr1={0,1,2,3};
但不管用哪种方法,数组的长度是可以明确知道的。并且不会再变长或者变短(学不了孙悟空的金箍棒)。
由于数组也是对象,所以以下代码是合法的。
Objectarr2=newint[4];
这就意味着数组继承了超类java.lang.Object的所有成员方法和字段。事实上,的确如此,我们可以通过以下代码来获取数组的类型信息Class。
Objectarr2=newint[4]; System.out.println(arr2.getClass()); Objectarr3=newString[4]; System.out.println(arr3.getClass());
输出的结果会是什么呢?
class[I
class[Ljava.lang.String;
class[I表示一个“int类型数组”在运行时的对象类型信息;class[Ljava.lang.String;表示一个“字符串类型数组”在运行时的对象类型信息。
那为什么数组不单独定义一个类来表示呢?就像字符串String类那样呢?
一个合理的解释是Java将其隐藏了。假如真的存在一个Array.java,我们也可以假想它真实的样子,它必须要定义一个容器来存放数组的元素,就像String类那样。
publicfinalclassString implementsjava.io.Serializable,Comparable,CharSequence{ /**Thevalueisusedforcharacterstorage.*/ privatefinalcharvalue[]; }
但这样做真的有必要吗?为数组单独定义一个类,是不是有点画蛇添足的意味。那既然数组没必要定义成一个类,也就没有必要再定义一个length()方法来获取数组的长度了,直接用length这个字段就可以了,不是吗?
那为什么字符串String类会有length()方法呢?来看一下源码就明白了。
/** *Returnsthelengthofthisstring. *ThelengthisequaltothenumberofUnicode *codeunitsinthestring. */ publicintlength(){ returnvalue.length; }
length()方法返回的正是字符数组value的长度(length),value本身是private的,因此很有必要为String类提供一个public级别的方法来供外部访问字符的长度。
总结一下,Java获取数组长度的时候用length,获取字符串长度的时候用的是length(),他们之间的区别我相信大家已经搞清楚了。
最后提醒一点:万丈高楼平地起。一栋楼能盖多高,一座大桥能造多长,重要的是它们的地基。同样对于我们技术人员来说,基础知识越扎实,走得就会越远。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。