String:
1、String的值是不可变的,意味着在该字符串上拼接或者删减等,都会产生一个新的字符串。也就意味着会在内存中创建新的对象。

StringBuffer:
1、StringBuffer的值是可变的,对字符串的增删不会创建新的对象
2、StringBuffer是线程安全的,底层使用的是synchronized来实现线程安全,所以效率相对StringBuilder会低一些

StringBuilder:
1、StringBuilder的值是可变的,对字符串的增删不会创建新的对象
2、StringBuilder是线程不安全的,所以效率相对比StringBuffer要高

故:
1、如果要操作少量的数据可以使用String
2、如果是单线程操作大量数据,可以使用StringBuilder
3、如果是多线程操作大量数据,可以使用StringBuffer