stringとstringbufferの違い


ニマ、最近2回面接して、この質問をしました.
 
 java  3          。

1.Character           ,

2.String          。    。

3.StringBuffer            ,     。

String:
         .
      ,     ,        .
       String                 ,          .
String  final ,      .

StringBuffer:
       ,             String        
            ,
StringBuffer sb = new StringBuffer();
note:              . 
sb = "welcome to here!";//error
       ,            ,       null. StringBuffer
            append  .
sb.append("hello");

        StringBuffer     String :

String str = new String("welcome to ");
str += "here";
               StringBuffer,    append(),  
  StringBuffer toSting();
    String       StringBuffer         ,         .

    String         ,    Sting                 .
           ,       .         . 

      :
 26         5000 ,

        String tempstr = "abcdefghijklmnopqrstuvwxyz";
        int times = 5000;
        long lstart1 = System.currentTimeMillis();
        String str = "";
        for (int i = 0; i < times; i++) {
            str += tempstr;
        }
        long lend1 = System.currentTimeMillis();
        long time = (lend1 - lstart1);
        System.out.println(time);
              ,                46687  。
   46 。
         

        String tempstr = "abcdefghijklmnopqrstuvwxyz";
        int times = 5000;
        long lstart2 = System.currentTimeMillis();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < times; i++) {
            sb.append(tempstr);
        }
        long lend2 = System.currentTimeMillis();
        long time2 = (lend2 - lstart2);
        System.out.println(time2);
       16      0
       ,StringBuffer       String    。           。        100000    ,    。     。

 

      :

str += "here";
               StringBuffer,    append(),  
  StringBuffer toSting();

  str += "here";     

StringBuffer sb = new StringBuffer(str);

sb.append("here");

str = sb.toString();

        "+"   String              

        String tempstr = "abcdefghijklmnopqrstuvwxyz";
        int times = 5000;
        long lstart2 = System.currentTimeMillis();
        String str = "";
        for (int i = 0; i < times; i++) {
            StringBuffer sb = new StringBuffer(str);
            sb.append(tempstr);
            str = sb.toString();
        }
        long lend2 = System.currentTimeMillis();
        long time2 = (lend2 - lstart2);
        System.out.println(time2);
       46922  ,   46 。

 

  :                          .  StringBuffer     

参考資料:
http://blog.csdn.net/yirentianran/article/details/2871417