区别一 运行速度: StringBuilder>StringBuffer>String
区别二 是否可更改:String是字符常量,一旦创建不可更改
StringBuilder与StringBuffer为字符串变量,可以更改
平时开发中创建String常量进行更改时,是在JVM内存中重新创建了一个String常量重新赋值,
而不是在原来的常量上进行更改.
例:String a = "abc"; a = "abcde";
先输入a为字符串abc 再输出a为abcde,好像是a这个对象被更改了,实际则是一种假象,首先是JVM
生成一个对象a,又创建了一个新的对象a并把值赋值成abcde,通过垃圾回收的机制回收第一个对象a
区别三 是否线程安全:从运行速度上我们可以看出StringBuilder是线程安全的,StringBuffer是线程不安全的
原因是StringBuffer的很多方法都添加了synchronized的关键字来保证线程安全
StringBuilder拼接字符串例子:StringBuilder s = new StringBuilder(); s.append("abc").append("de")
使用场景:String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况