JAVA的字符串拼接与性能

package javaBasic;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * JAVA的字符串拼接与性能
 * 
 * @author markGao
 * 
 *         咱们将执行20个拼接”*”50,000次的测试。下面是咱们将使用到的拼接字符串的方法:
 */
public class StringAndStrBuffAndStrBuilderCompare {

    private static final int OUTER_ITERATION = 20;
    private static final int INNER_ITERATION = 50000;

    String addTestStr = "";

    String concatTestStr = "";

    StringBuffer concatTestSb = null;

    StringBuilder concatTestSbu = null;

    SimpleDateFormat sdFormat = new SimpleDateFormat("yyyyMMddhhmmssSSS");

    StringAndStrBuffAndStrBuilderCompare() {

    }

    public void test() {

        System.out.println("StringAddConcat " + sdFormat.format(new Date()));

        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {
            addTestStr = "";
            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)
                addTestStr += "*";
        }
        System.out.println("StringAddConcat " + sdFormat.format(new Date()));

        System.out.println("StringConcat " + sdFormat.format(new Date()));
        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {
            concatTestStr = "";
            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)
                concatTestStr.concat("*");
        }
        System.out.println("StringConcat " + sdFormat.format(new Date()));

        System.out.println("StringBufferConcat " + sdFormat.format(new Date()));
        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {
            concatTestSb = new StringBuffer();
            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)
                concatTestSb.append("*");
        }
        System.out.println("StringBufferConcat " + sdFormat.format(new Date()));

        System.out
                .println("StringBuilderConcat " + sdFormat.format(new Date()));
        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {
            concatTestSbu = new StringBuilder();
            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)
                concatTestSbu.append("*");
        }
        System.out
                .println("StringBuilderConcat " + sdFormat.format(new Date()));

    }

    /**
     * 这段代码是String.concat()的字节码,从这段代码中,咱们能够清楚的看到,concat()方法使用了
     * StringBuilder,concat()的性能应该和StringBuilder的同样好,可是因为额外的建立StringBuilder和
     * 作.append(str).append(str).toString()的操做,使得concate的性能会受到一些影响,因此
     * StringBuilder和String Cancate的时间是1.8和3.3。
     * 
     * 所以,即时在作最简单的拼接时,若是咱们不想建立StringBuffer或StringBuilder实例使,咱们也因该使用concat。
     * 可是对于大量的字符串拼接操做,咱们就不该该使用concat(译者注:因
     * 为测试代码功能上并不彻底等价,更换后的测试代码concat的平均处理时间是1650.9毫秒。这个结果在原文的评论里面。),由于concat会下降
     * 你程序的性能,消耗你的cpu。所以,在不考虑线程安全和同步的状况下,为了得到最高的性能,咱们应尽可能使用StringBuilder
     * 
     * @param args
     */

    public static void main(String[] args) {
        StringAndStrBuffAndStrBuilderCompare test = new StringAndStrBuffAndStrBuilderCompare();
        test.test();
    }

}
相关文章
相关标签/搜索