String和StringBuilder以及StringBuffer

分别使用String/StringBuilder/StringBuffer来拼接3000000次字符串,对比各自损耗的时间:经过测试: String做字符串拼接的时候,性能极低(耗时),原因是Sting是不可变的,每次内容改变都会在内存中创建新的对象. String耗时:183120ms StringBuffer耗时:390ms StringBuilder耗时:280ms 

结论:以后拼接字符串,统统使用StringBuffer/StringBuilder,不要使用String. 

------------------------------------------------------------------ 

String和StringBuilder以及StringBuffer的区别(建议使用StringBuilder): 

   StringBuffer和StringBuilder都表示可变的字符串,功能方法都是相同的. 

   唯一的区别:   StringBuffer:  StringBuffer中的方法都使用了synchronized修饰符,表示同步的,在多线程并发的时候可以保证线程安全,保证线程安全的时候,性能(速度)较低.   StringBuilder:StringBuilder中的方法都没有使用了synchronized修饰符,不安全,但是性能较高.

package dishiyitian;

abstract class fanhui

{

    public long time(){

        long begin=System.currentTimeMillis();

        gezi();

        long end=System.currentTimeMillis();

        long time1=end-begin;

        return time1;

    }

    abstract void gezi();

}

class stringyingyong extends fanhui{

    void gezi()

    {

        String  pString=new String("");

        for(int i=0;i<=3000000;i++)

        {

            pString+=i;

        }

    }

}

class stingbuilder extends fanhui{

    void gezi()

    {

        StringBuilder pStringBuilder=new StringBuilder("");

        for(int i=0;i<=3000000;i++)

        {

            pStringBuilder.append(i);

        }

    }

}

class buffer extends fanhui{

    void gezi()

    {

        StringBuffer p=new StringBuffer("");

        for(int i=0;i<=3000000;i++)

        {

            p.append(i);

        }

    }

}

public class builder {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        stringyingyong p=new stringyingyong();

         stingbuilder  q=new stingbuilder();

         buffer r=new buffer();

         System.out.println(p.time()+"\t"+q.time()+"\t"+r.time()+"\t");

    }

}

结果如下

183120

280

390

猜你喜欢

转载自blog.csdn.net/zhouzhou_98/article/details/81232714
今日推荐