字符串累加 - 性能优化

1. 测试代码:

package boke.string;

/**
 * 字符串累加与性能优化
 * 
 * @since jdk1.6
 * @author 毛正吉
 * @version 1.0
 * @date 2010.05.25
 * 
 */
public class AppendString {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		final int N = 100000;

		long a1 = System.currentTimeMillis();
		String s1 = "";
		for (int i = 1; i <= N; i++) {
			s1 += "#";
		}
		long a2 = System.currentTimeMillis();
		System.out.println("用操作符串联两个字符串: " + (a2 - a1) + "ms");

		StringBuffer sbf = new StringBuffer();
		a1 = System.currentTimeMillis();
		for (int i = 1; i <= N; i++) {
			sbf.append("#");
		}
		a2 = System.currentTimeMillis();
		System.out.println("用StringBuffer串联两个字符串: " + (a2 - a1) + "ms");

		StringBuilder sbl = new StringBuilder();
		a1 = System.currentTimeMillis();
		for (int i = 1; i <= N; i++) {
			sbl.append("#");
		}
		a2 = System.currentTimeMillis();
		System.out.println("用StringBuilder串联两个字符串: " + (a2 - a1) + "ms");
	}

}

2. 结果输出:

用操作符串联两个字符串: 22625ms
用StringBuffer串联两个字符串: 0ms
用StringBuilder串联两个字符串: 32ms

3. 说明:

(1) String str = "first string";
    str = str + "second string";

    上面的字符串"first string"创建后是无法改变的,而它的引用却可以改变。
这个字符串的引用是str,它最初指向字符串"first string",在上面的代码中它
被改变成指向str与"second string"串联后的新的字符串。

(2) String str = "first string";
    StringBuffer sbf = new StringBuffer(str);
    sbf.append("second string");
    str = sbf.toString();

    上面代码的意思是:将两个字符串串联后并且拷贝到一个临时字符串缓冲区变量中。

因此有一个应用String类的基本规则:最好通过StringBuffer来构建一个字符串对象。这样可以获得更好的系统性能。















你可能感兴趣的:(性能优化)