String:
String是一个不可变对象,每次修改String的值都会创建一个新的对象,然后把新的值保存进去;特别是字符串拼接的场景,尤其是循环拼接,会多次创建很少使用的字符串对象,导致有限的内存空间被占用,并且无用的对象过多后还会触发GC,这个过程也会耗费性能。
StringBuffer:
StringBuffer是一个可变对象,对StringBuffer的拼接操作的都是同一个对象,不会占用额外空间,适合多字符串拼接的场景。
总结:
String不可变,多字符串拼接效率低;
StringBuffer可变,多字符串拼接效率高,线程安全。