Java字符串拼接效率分析_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java字符串拼接效率分析

Java字符串拼接效率分析

 2015/1/7 22:08:02  qq54903099  程序员俱乐部  我要评论(0)
  • 摘要:关于字符串处理在Java中通常有三个类进行处理:StringStringBuilderStringBuffer这三个类进行字符串拼接,StringBuilder和StringBuffer都有同样的方式,都拥有append()方法.而StringBuilder和StringBuffer不同之处在于,在做一次append操作的时候,StringBuffer是线程安全的(仅仅是在一次操作)。StringBuffer的线程安全在于,做append()操作的时候
  • 标签:Java 分析 字符串 效率

关于字符串处理在Java中通常有三个类进行处理:

String
StringBuilder
StringBuffer

这三个类进行字符串拼接,StringBuilder和StringBuffer都有同样的方式,都拥有append()方法.而StringBuilder和StringBuffer不同之处在于,在做一次append操作的时候,StringBuffer是线程安全的(仅仅是在一次操作)。StringBuffer的线程安全在于,做append()操作的时候,在方法前增加了synchronized操作。所以可以预见StringBuilder和StringBuffer在做append()的方法的时候StringBuilder更快(而在单线程下,这种差异不是特别大)。

?

String类进行字符串添加的方式有两种:

1.直接使用 “+” 进行拼接

2.使用concat进行拼接

?

下面就根据这四种操作进行测试。

测试用例:

?

class="java" name="code">    private static final int OUTER_ITERATION = 20;
    private static final int INNER_ITERATION = 50000;

    @Test
    public void testString() {
        String addTestStr = "";

        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {

            StopWatch stopWatch = new LoggingStopWatch("StringAddConcat");

            addTestStr = "";

            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)

                addTestStr += "*";

            stopWatch.stop();
        }
        System.out.println(addTestStr);
    }
    @Test
    public void testStringConcat() {
        String concatTestStr = "";

        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {

            StopWatch stopWatch = new LoggingStopWatch("StringConcat");

            concatTestStr = "";

            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)

                concatTestStr = concatTestStr.concat("*");

            stopWatch.stop();

        }
    }
    @Test
    public void testStringBuffer() {
        StringBuffer concatTestSb = null;

        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {

            StopWatch stopWatch = new LoggingStopWatch("StringBufferConcat");

            concatTestSb = new StringBuffer();

            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)

                concatTestSb.append("*");

            stopWatch.stop();

        }
    }
    @Test
    public void testStringBuilder() {

        StringBuilder concatTestSbu = null;

        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {

            StopWatch stopWatch = new LoggingStopWatch("StringBuilderConcat");

            concatTestSbu = new StringBuilder();

            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)

                concatTestSbu.append("*");

            stopWatch.stop();

        }
    }

?

?

分别运行得到的结果

StringBuilder > StringBuffer > concat> +

?

?

发表评论
用户名: 匿名