Java String vs StringBuffer vs StringBuilder 性能比较

package org.onepiece;

public class JavaStringTest
{
    public  final  static int Num = 10000;

    public static void test1String()
    {
        long start =System.currentTimeMillis();

        String str = "ROSE";
        for (int i=0; i<=Num; i++)
        {
            str = str + i + ",";
        }

        long ms= System.currentTimeMillis() - start;
        System.out.println("String:" + ms);
    }

    public static void test2StringBuffer()
    {
        long start =System.currentTimeMillis();

        StringBuffer buffer=new StringBuffer();
        for (int i=0; i<=Num; i++)
        {
            buffer.append(i + ",");
        }

        long ms= System.currentTimeMillis() - start;
        System.out.println("StringBuffer:" + ms);
    }

    public static void test3StringBuilder()
    {
        long start =System.currentTimeMillis();

        StringBuilder builder=new StringBuilder();
        for (int i=0; i<=Num; i++)
        {
            builder.append(i + ",");
        }

        long ms= System.currentTimeMillis() - start;
        System.out.println("StringBuilder:" + ms);
    }
}

 

package org.onepiece;

import java.lang.*;

public class Main 
{
public static void main(String[] args) throws Exception { JavaStringTest.test1String(); JavaStringTest.test2StringBuffer(); JavaStringTest.test3StringBuilder(); } }
String:486
StringBuffer:8
StringBuilder:3

 

String类是不可变类,任何对String的改变都会引发新的String对象的生成。
StringBuffer、StringBuilder 则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。

 

StringBuffer和StringBuilder类的区别在于:
StringBuffer是线程安全的。
StringBuilder不是线程安全的。

 

在单线程中StringBuilder比StringBuffer的性能高。

如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;
如果要在多线程下操作,为了保证线程安全,则要使用StringBuffer类了。让对象自行管理同步的问题。

 

posted @ 2017-08-19 23:44  茗::流  阅读(185)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。