Java Substring() 的实现

写过Java的人应该都用过substring(int bedinIndex, int endIndex)方法。我发现这个简单的方法在实现上居然经过了一次大的变革。

substring()的用途

代码:

1
2
3
String origin = "asdfg"; 
origin = origin.substring(1,3);
System.out.println(origin);

输出:

1
sd

我们发现它能将原始字符串中从下标为beginIndex到endIndex-1之间的子串取出。那它是怎么实现的呢?

substring()的实现

Java中的字符串有三个域:char value[], int offset以及int count,它们分别存储字符串的值,起始下标与长度。

JDK6版本

在这个版本中,每次执行substring()方法时并不会新建新的string,仅仅只是将上述三个域中的offset,count做必要的修改。返回对象仍指向原来的数据。

Substring()实现版本一

这样一来,缺点就比较明显:当原始字符串比较长,而截取的子串比较短时,在后续的使用中就会浪费大量的空间。

JDK7+版本

在上一个版本基础上,这个方法进行了改进,每次使用这个方法都会新建一个string对象,并将其返回。

Substring()实现版本二



本文链接: http://home.meng.uno/articles/f3057e6c/ 欢迎转载!

© 2018.02.08 - 2020.06.02 Mengmeng Kuang  保留所有权利!

UV : | PV :

:D 获取中...

Creative Commons License