The substring() Method in JDK 6 and JDK 7
来源:互联网 发布:淘宝关键词挖掘大师 编辑:程序博客网 时间:2024/05/20 10:14
The substring(int beginIndex, int endIndex)
method in JDK 6 and JDK 7 are different. Knowing the difference can help you better use them. For simplicity reasons, in the followingsubstring()
represent the substring(int beginIndex, int endIndex)
method.
1. What substring() does?
The substring(int beginIndex, int endIndex) method returns a string that starts with beginIndex and ends with endIndex-1.
String x = "abcdef";x = x.substring(1,3);System.out.println(x);
Output:
bc
2. What happens when substring() is called?
You may know that because x is immutable, when x is assigned with the result of x.substring(1,3), it points to a totally new string like the following:
However, this diagram is not exactly right or it represents what really happens in the heap. What really happens when substring() is called is different between JDK 6 and JDK 7.
3. substring() in JDK 6
String is supported by a char array. In JDK 6, the String class contains 3 fields: char value[], int offset, int count. They are used to store real character array, the first index of the array, the number of characters in the String.
When the substring() method is called, it creates a new string, but the string’s value still points to the same array in the heap. The difference between the two Strings is their count and offset values.
The following code is simplified and only contains the key point for explain this problem.
//JDK 6String(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);}
4. A problem caused by substring() in JDK 6
If you have a VERY long string, but you only need a small part each time by using substring(). This will cause a performance problem, since you need only a small part, you keep the whole thing. For JDK 6, the solution is using the following, which will make it point to a real sub string:
x = x.substring(x, y) + ""
5. substring() in JDK 7
This is improved in JDK 7. In JDK 7, the substring() method actually create a new array in the heap.
//JDK 7public 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);}
Top 10 questions about Java String.
References:
1. Changes to substring
2. Java 6 vs Java 7 when implementation matters
- The substring() Method in JDK 6 and JDK 7
- The substring() Method in JDK 6 and JDK 7
- The substring() Method in JDK 6 and JDK 7
- The substring() Method in JDK 6 and JDK 7
- The substring() Method in JDK 6 and JDK 7
- The substring() Method in JDK 6 and JDK 7 (jdk6中的substring()会造成内存泄漏)
- How SubString method works in Java - Memory Leak Fixed in JDK 1.7
- GlassFish v3 requires a JDK 1.6 and not a JRE. Please add/select the correct JDK in the Server prope
- 三张图彻底了解JDK 6和JDK 7中substring的原理及区别
- Installing the Sun Java 6 JDK in Ubuntu 12.04
- The distinct between jdk and jre[转]
- Install the Oracle JDK 6
- Please make sure the -vm option in eclipse.ini is pointing to a JDK and verify that Installed JRE’s are also using JDK installs
- the relation of jre and jdk and jvm
- Please make sure the -vm option in eclipse.ini is pointing to a JDK and verify that Installed JRE’s
- Please make sure the -vm option in eclipse.ini is pointing to a JDK and verify that Installed JRE’s
- Please make sure the -vm option in eclipse.ini is pointing to a JDK and verify that Installed JRE’s
- Maven打包异常Unable to locate the Javac Compiler in:Please ensure you are using JDK 1.4 or above and
- RTSP协议解析
- CSS3制作下拉菜单
- C#关于类型之间的转换,Object、int、string、double
- ThinkPHP 模板循环输出 Volist 标签
- 关于u-boot中的.balignl 16,0xdeadbeef的理解
- The substring() Method in JDK 6 and JDK 7
- grep用法详解 grep与正则表达式
- mapreduce的二次排序 SecondarySort
- Linux系列-目录架构
- seaJs学习笔记之seaJs配置方法
- DNS中的正向解析与反向解析
- CSS 绝对定位属性absolute用法初探
- map和list 的相互转换
- hdu 3065 AC自动机模版题