【Java】字符串substring方法在jkd6,7,8中的差异
1.概述
转载:注意:字符串substring方法在jkd6,7,8中的差异
这篇文章讲的更好:灵魂拷问:Java 的 substring() 是如何工作的?
标题中的substring方法指的是字符串的substring(int beginIndex, int endIndex)方法,这个方法在jdk6,7是有差异的。
substring有什么用?
substring返回的是字符串索引位置beginIndex开始,endIndex-1结束的字符串。
来看这个例子:
String x = "abcdef";
x = x.substring(1,3);
System.out.println(x);
输出:
bc
下面看看在JDK之间,它们的实现原理有什么不一样,及值得注意的地方。
JDK 6
String背后是由char数组构成的,在JDK6中,String包含三个字段:char value[], int offset, int count,意思很简单。
substring被调用时,它会创建一个新的字符串,但字符串的值还指向堆中同样的字符数组。它们的区别只是数量和下标引用不一样,如图所示。
JDK6中的部分源码可以说明这个问题。
/
/JDK 6
String(int offset, int count, char value[]) {this.value = value;this.offset = offset;this.count = count;
}public String substring(int beginIndex, int endIndex) {//check boundaryreturn new String(offset + beginIndex, endIndex - beginIndex, value);
}
会有什么问题?
如果一个很长的字符串,但是每次使用substring(),你只需要很小的一部分。这将会导致性能问题,因为只需要一小部分,却引用了整个字符数组内容。对于JDK 6,解决方案是使用以下内容:
x = x.substring(x, y) + ""
JDK 7,8
JDK6这种问题在JDK7+中已经改善了,JDK7+中实际是重新创建了一个字符数组,如图。
JDK7中的部分源码,JDK8类似。
//JDK 7
public String(char value[], int offset, int count) {//check boundarythis.value = Arrays.copyOfRange(value, offset, offset + count);
}public String substring(int beginIndex, int endIndex) {//check boundaryint subLen = endIndex - beginIndex;return new String(value, beginIndex, subLen);
}
对于JDK的这种差异,我们知道就好,现在应该都是JDK7及8了吧,其实对于小字符串的这种操作性能也是可以忽略不计的。
M.扩展阅读
灵魂拷问:Java 的 substring() 是如何工作的?
【Java】字符串substring方法在jkd6,7,8中的差异相关推荐
- 字符串substring方法在jkd6,7,8中的差异
转载自 注意:字符串substring方法在jkd6,7,8中的差异 标题中的substring方法指的是字符串的substring(int beginIndex, int endIndex)方法,这 ...
- java字符串反转方法【全】
搜集的java字符串反转方法,一般用于面试,项目中用的很少··· package com.wsheng.aggregator.algorithm.string;import java.util.Sta ...
- java字符串的方法 1118
java字符串的方法 字符串的定义 方式一 String 变量名 = "内容"; 方式二 String 变量名 = new String(); 方式三 String 变量名 = n ...
- Java字符串截取 方法
在 String 中提供了两个截取字符串的方法,一个是从指定位置截取到字符串结尾,另一个是截取指定范围的内容. 方法的重载: public String substring(int beginInde ...
- 图解Java的substring()方法底层干了啥?
JDK 6中substring(int beginIndex,int endIndex)方法的实现与JDK 7中的实现是不同的.在本文中会去解释这些差异.为简单起见,我们用substring()方法表 ...
- JAVA 字符串截取方法
目录 方法一 substring 方法二 StringUtils.substringAfter 方法三 split 方法一 substring String str = "123,496,7 ...
- java字符串分割方法.split()的详细用法
先看看它在java包中的Java API是: java.lang.String 方法总结 (1)按指定普通字符分割: java代码如下:String string="123@456@789& ...
- java字符串最长回文串_Java中的字符串回文程序
java字符串最长回文串 Given a string and we have to check whether it is palindrome string or not. 给定一个字符串,我们必 ...
- [转载] Java字符串分割方法
参考链接: Java中的StringTokenizer方法的示例 2 [size=medium]1.用split()方法进行分割,分割开的子字符串放入数组,然后进行处理. 示例代码如下: public ...
最新文章
- HostMonitor使用介绍
- android英文文献翻译,有关android技术英文文献翻译
- python程序设计报告-20183215 实验三《Python程序设计》实验报告
- 设为首页及收藏本页代码 兼容IE和Firefox
- 多线程消息监听容器配置[ 消费者spring-kafka配置文件]
- Netty入门官方例子
- 《图解密码技术》分组密码(1) 概览
- 赶紧下载SublimeText并快速设置代码自动补全,效率大大提高
- long 比较大小_Long-Term Feature Banks
- json数据格式化展示出来
- Java最佳实践–高性能序列化
- 概率图模型笔记(三)条件随机场(CRF)基础
- 对 PInvoke 函数的调用导致堆栈不对称问题
- 陶哲轩:一个华裔数学天才的传奇
- HDU 5144 NPY and shot(三分法)
- 数字电路——流水灯(一)
- app store无法下载、安装软件,一直在转圈的一个解决方法
- 【转】TinyXML2 入门教程
- (搞笑)经典!一些很彪悍的句子
- SQL语句增删改查公司-员工3表典型案例
热门文章
- 华为Mate 40 Pro钢化膜上手:6.6寸大曲率瀑布屏 黑边加速消失
- 骑手送外卖获奖1500多万后又遭撤销,网友:人生大起大落不过如此
- 期待已久!iPhone 13将使用带LTPO技术的OLED屏幕
- 罗永浩宣布要做带货一哥后,合作单子如雪花般飞来
- 双11落下帷幕,天猫、京东战报再创记录,拼多多“失声”...
- 看呆了!日本男粉丝凭瞳孔倒影找到偶像住所 实施猥亵...
- 十一全国电影票房近8亿元 创春节档以来单日大盘新高
- 中兴通讯与北京交通大学、中国移动北京公司签署 “5G战略合作框架协议”
- 网约代收垃圾App火了!别笑,垃圾分类下一个就到你了
- 联发科完成双模芯片实验室测试 首批5G终端明年一季度问世