String+与StringBuffer.append()的速度比较

今天在回顾之前的笔记的时候,看到了自己记录的String,StringBuffer,StringBuild的比较,写着速度方面StringBuild>StringBuffer>String。

StringBuild>Stringbuffer是明显的,因为线程不安全的速度快于线程安全的(少了很多线程锁的时间开销)。

那么StringBuild和StringBuffer是一直都是快于String吗?

搜出来的第一篇文章就是:https://www.cnblogs.com/aipan/p/7443832.html

在此基础上,我加上了StringBuild的比较,代码如下:

public class Test {
    public static void main(String[] args)
    {
        String a = "a";
        String b = "b";
        String c = "c";
        long start = System.currentTimeMillis();
        for (int i = 0; i < 100000000; i++) {
            String string = a + b + c;
            if (string.equals("abc")) {}
        }
        System.out.println("string+ cost time:" + (System.currentTimeMillis() - start) + "ms");
        start = System.currentTimeMillis();
        for (int i = 0; i < 100000000; i++) {
            StringBuffer stringBuffer = new StringBuffer();
            stringBuffer.append(a);
            stringBuffer.append(b);
            stringBuffer.append(c);
            String string = stringBuffer.toString();
            if (string.equals("abc")) {}
        }
        System.out.println("stringbuffer cost time:" + (System.currentTimeMillis() - start) + "ms");
        start = System.currentTimeMillis();
        for (int i = 0; i < 100000000; i++) {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append(a);
            stringBuilder.append(b);
            stringBuilder.append(c);
            String string = stringBuilder.toString();
            if (string.equals("abc")) {}
        }
        System.out.println("stringbuilder cost time:" + (System.currentTimeMillis() - start) + "ms");
    }
}

结果如下:

String+与StringBuffer.append()的速度比较_第1张图片

正如上面文章所说,此处的String其实调用的两次StringBuild的append()方法,相较于后两种都是更快的。

结论:在string+写成一个表达式的时候(更准确的说,是写成一个赋值语句的时候),效率其实比另两个更快,但如果不是这样的话,则效率会明显低于另外两个。(详解见上述链接文章,此处主要记录)

你可能感兴趣的:(java相关)