首先String是不可变字符串,因为它是final修饰的,每次操作都会产生新的String对象
    StringBuffer和StringBuilder是可变字符串,每次操作都是在原对象上
    StringBuiler不是线程安全的—-所有方法都没有被synchronized修饰
    StringBuffer是线程安全的—-所有的方法都被synchronized修饰
    所以StringBuilder的效率理论上是大于StringBuff的
    优先使用StringBuilder,多线程使用共享变量时使用StringBuffer

    使用“+”拼接字符串,本质上与使用StringBuilder的append方法一样
    使用“+”,在编译时也会转成StringBuilder类进行append操作
    StringBuilder和StringBuffer有共同的父类:AbstractStringBuilder抽象类
    调用的方法也是父类的方法,就是后者在调用的时候加了同步锁:synchronized