String、StringBuilder、StringBuffer的区别

String、StringBuilder、StringBuffer的区别

由于自己的记性实在是不太好,老是搞混它们三者的关系,今天就把它们用表格的方式呈现出来,加深自己的记忆。

String StringBuilder StringBuffer
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 可变类,速度更快 StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量
不可变字符序列 可变字符序列 可变字符序列
线程不安全 线程安全
在字符串不经常变化的场景中可以使用 String 类,例如常量的声明、少量的变量运算。 在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以考虑使用 StringBuffer,例如 XML 解析、HTTP 参数解析和封装。 在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,则可以考虑使用 StringBuilder,如 SQL 语句的拼装、JSON 封装等

三者之间的关系

String、StringBuilder、StringBuffer的区别