StringBuilder和子串性能

时间:2015-02-27 00:28:21

标签: java substring stringbuilder

关于与String中的Java操作相关的性能问题:

String s = ".........................,--content I wanted---,....";

基本上我将使用for循环来迭代一个长字符串并在,之间提取内容。

使用substring是在迭代期间记录开始索引和结束索引,然后执行s.subtring(begin,end)

使用StringBuilder,我会在迭代期间的逗号之间append char。{/ p>

这是否存在性能问题?我的意思是当我对extracting字符串的内容进行大量此类操作时,哪一个会更快。

1 个答案:

答案 0 :(得分:3)

string.substring比使用StringBuilder追加要快得多。

在Java7u6之前,substring方法返回了一个新的String,它保留了对旧字符串值(char数组)的引用,并调整了开始和结束位置。这是它调用的构造函数:

 String(int offset, int count, char value[]) {
     this.value = value;
     this.offset = offset;
     this.count = count;
 }

这已更改,较新版本使用以下代码:

 Arrays.copyOfRange(value, offset, offset+count);

这仍然要快得多,因为Arrays.copyOfRange使用System.arraycopy,它可以非常快速地复制数组,当然比重复调用append更快。