
StringBuffer和StringBuilder 非常类似,均代表可变的字符序列。这两个类都是抽象类的,方法一模一样
StringBuffer线程安全,做线程同步检查,效率低
StringBuilder线程不安全,不做线程同步检查,效率较高,建议使用该类
StringBuilder的使用 速度对比:
package oop2.demo06;
public class StringF {
public static void main(String[] args) {
    String str = "bnu";
    StringBuilder builder = new StringBuilder();
    long l = System.currentTimeMillis();
    for (int i = 0; i < 100000; i++) {
        //str = str.concat("sxt");
        //builder.append("sxt");
    }
    long l1 = System.currentTimeMillis();
    System.out.println(l1-l);     //查看运行的时间,用以对比StringBuilder 和String运行的速度
}} 一些常用方法: package oop2.demo06;
public class StringG {
public static void main(String[] args) {
    //String s = "bnu";
    StringBuilder builder = new StringBuilder("bnu");
    builder.append("北京师范大学");     //内容追加的方法 ,常用。
    builder.insert(0,"BNU");   //指定的位置插入字符串。数组下标从0开始
    char c = builder.charAt(2);   //取出指定下标字符
    builder.setCharAt(3,'J');    //设置指定位置的的字符
    builder.replace(0,4,"北师大");    //进行指定位置的字符替换  [0,4)
    builder.deleteCharAt(3);  //删除指定位置字符
    builder.delete(1,3);   //删除多个字符 [1, 3)
    builder.reverse();   //倒序输出字符串
    System.out.println(builder);
    System.out.println(c);
    //String类型与  StringBuilder类 互转
    String str = "bnu";
    StringBuilder stringBuilder = new StringBuilder(str);
    String s = stringBuilder.toString();
}} 一些面试题 StringBuilder 底层默认char数组长度为16
StringBuilder 底层的扩容机制 是 : 原有的数组长度*2+2
package oop2.demo06;
public class StringL {
public static void main(String[] args) {
    String str = "abcd";
    String a = "a";
    String b = "b";
    String c = "c";
    String d = "d";
    //字符串拼接的时候,如果全部是常量 ,和直接写一个结果的含义是一样的
    String str2 = "a" + "b" + "c" + "d";    //创建了几个对象?  1个
    String str3 = a+b+c+d;     //创建了1个对象
    //只要含有变量的连接,采用的就是优化的机制:
    StringBuilder builder = new StringBuilder();
    builder.append(a);
    builder.append(b);
    builder.append(c);
    builder.append(d);
    System.out.println(str==str2);  //true
    System.out.println(str2==str3);  //false
}}