Java8性能优化之字符串拼接

字符串拼接常用到的几种方式如下:

  1、“+”拼接;

  2、concat拼接;

  3、StringBuilder(StringBuff)拼接。

 

几种拼接方式的比较测试如下:

代码:

     //字符串拼接测试
        String appendedStr = "a";
        String appendStr = "b";

        System.out.println("测试代码循环10000次。。。,结果如下:");
        long length = 10000;

        //➕号拼接
        long begin = System.currentTimeMillis();
        for (int i = 0; i < length; i++) {
            appendedStr += appendStr;
        }
        long end = System.currentTimeMillis();
        System.out.println("➕号拼接字符串用时:"+(end - begin));

        //concat拼接
        begin = System.currentTimeMillis();
        for (int i = 0; i < length; i++) {
            appendedStr.concat(appendStr);
        }
        end = System.currentTimeMillis();
        System.out.println("concat拼接字符串用时:"+(end - begin));

        //stringbuilder拼接
        begin = System.currentTimeMillis();
        StringBuilder stringBuilder = new StringBuilder(appendedStr);
        for (int i = 0; i < length; i++) {
            stringBuilder.append(appendStr);
        }
        stringBuilder.toString();
        end = System.currentTimeMillis();
        System.out.println("StringBuilder拼接字符串用时:"+(end - begin));

 

测试结果如下:

 

其中第一种方式拼接字符串在我的视眼中是最常见的,孰不知第一种方式是最不值得提倡的(性能消耗大,效率低),concat是由String类提供的封装类性能较“+”好很多,相较于前两者StringBuilder的速度基本可以忽略,快太多了。

以上没有测试StringBuff主要是因为StringBuff和StringBuilder的实现实现原理和操作基本上一致,主要差别是StringBuff是由synchronized修饰,支持并发操作线程安全的类。而StringBuilder是不支持并发操作的,所以多线程时建议使用StringBuff。单线程中StringBuilder的性能要好于StringBuff。

StringBuilder 和 StringBuff在单线程下的比较测试如下:

由以上测试结果可以看出,在百万级别以下这两种方式是难分伯仲的,但是上升的千万级别的时候差别就很明显了。

 

 

代码优化(性能提升)任重道远,希望大牛能给予建议。

posted @ 2019-01-31 20:05  音译昌  阅读(1103)  评论(0编辑  收藏  举报