简单来说就是StringBuilder和StringBuffer操作的是对象值,而String操作的是对象的地址值。
值操作
String的值是放到常量池里面然后将地址值给对象,改变值的时候是重新在常量池创建一个新的值,再将这个新的值给之前的对象覆盖,原有的字符串还是存在常量池里面直到被垃圾回收站回收;但是StringBuilder和StringBuffer是直接操作其对象本身的数据,它们的本质是不一样的。
运行速度/线程安全
StringBuilder运行速度最快,其次是StringBuffer,再然后是String。String是最慢的应该很好理解,String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢;StringBuilder没有被锁所修饰,本身线程不安全,线程不安全一般都速度快;StringBuffer是被锁修饰的,所以相对来讲比Builder慢,但是比String要快。
应用场景
StringBuilder因为线程不安全,速度快,所以只能在单线程条件下在字符串缓冲区的大量操作;StringBuffer线程安全,所以可以在多线程条件下在字符串缓冲区的大量操作;String速度慢,所以适用于少量的字符串操作