当前位置: 首页 > Web前端 > JavaScript

注:jkd6,7,8中字符串substring方法的区别

时间:2023-03-27 15:32:18 JavaScript

题目中的substring方法是指字符串的substring(intbeginIndex,intendIndex)方法,jdk6,7中有所不同。子串有什么用?substring返回从字符串索引位置beginIndex开始到endIndex-1结束的字符串。让我们看一下这个例子:Stringx="abcdef";x=x.substring(1,3);System.out.println(x);Output:bc让我们来看看JDKs之间的区别和它们的实现原理一样的,值得注意的。JDK6String由char数组组成。在JDK6中,String包含三个字段:charvalue[]、intoffset、intcount。意思很简单。当调用substring时,它创建了一个新的字符串,但该字符串的值仍然指向堆上的同一个字符数组。它们之间唯一的区别是数字和下标引用,如图所示。JDK6中的部分源码可以说明这个问题。//JDK6String(intoffset,intcount,charvalue[]){this.value=value;this.offset=offset;this.count=count;}publicStringsubstring(intbeginIndex,intendIndex){//检查boundaryreturnnewString(offset+beginIndex,endIndex-beginIndex,value);}会出什么问题呢?如果一个很长的字符串,但是每次使用substring(),只需要一小部分。这会导致性能问题,因为只需要一小部分,但会引用整个字符数组内容。对于JDK6,解决方案是使用如下:x=x.substring(x,y)+""JDK7,8JDK6这个问题在JDK7+中得到了改善,JDK7+实际上重新创建了一个字符数组,比如图片。JDK7中的部分源代码与JDK8类似。//JDK7publicString(charvalue[],intoffset,intcount){//checkboundarythis.value=Arrays.copyOfRange(value,offset,offset+count);}publicStringsubstring(intbeginIndex,intendIndex){//检查boundaryintsubLen=endIndex-beginIndex;returnnewString(value,beginIndex,subLen);}对于JDK中的这个区别,我们是知道的,现在应该是JDK7和8了,其实对于小字符串这种操作性能也是可以忽略不计的。最后,如果您觉得这篇文章对您有点帮助,请点个赞。或者可以加入我的开发交流群:1025263163互相学习,我们会有专业的技术解答。如果您觉得这篇文章对您有用,请给我们的开源项目一个小星星:https://gitee。com/ZhongBangKe...非常感谢!JAVA学习手册:https://doc.crmeb.com技术交流论坛:https://q.crmeb.com

最新推荐
猜你喜欢