StringBuffer和StringBuilder

339 阅读1分钟
  1. StringBuffer:可变长字符串,运行效率慢,线程安全
  2. StringBuilder : 可边长字符串、运行快、线程不安全
  3. 运行效率:StringBuilder>StringBuffer>String
package com.Class.StringClass;

public class Test {
    public static void main(String[] args) {
        //开始时间
        long start = System.currentTimeMillis();

        /*
        String str = "";
        for (int i = 0; i < 99999; i++) {
            str += i;
        }
        System.out.println(str);
         */


        StringBuilder s = new StringBuilder();
        // StringBuffer s = new StringBuffer();
        for (int i = 0; i < 99999; i++) {
            s.append(i);
        }
        System.out.println(s.toString());
        long end = System.currentTimeMillis();
        System.out.println("用时:"+(end-start));//String用时39599  StringBuilder用时39  StringBuffer用时51
    }
}
  1. StringBuffer和StringBuilder的一些常用的方法
package com.Class.StringClass;

public class stringBuffer {

    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        //StringBuilder sb = new StringBuilder();与StringBuffer的用法一样
        //1.append();追加
        sb.append("java is the best language");
        System.out.println(sb.toString());
        sb.append(",java is so good");
        System.out.println(sb.toString());
        //2.insert();添加
        sb.insert(0,"haha");
        System.out.println(sb.toString());
        //3.replace();替换
        sb.replace(0,4,"hello,");//0<  Str   <=4  前开后闭
        System.out.println(sb.toString());
        //4.delete();删除
        sb.delete(0,sb.length()-1);
        System.out.println(sb.length());
    }
}

输出结果:

  1. 线程安全:StringBuffer是线程安全的,因为StringBuffer中有很多方法带有synchronized方法。StringBuilder是不安全的.
  2. 总结
    • String:适用与少量的字符串操作的情况
    • StringBuffer:适用于多线程下在字符串缓冲区进行大量操作的情况
    • StringBuilder:适用于单线程下在字符串缓冲区进行大量操作的情况