一、对象不同
String是字符串变量,值不可变的(private final char[] value)。导致重新复制,就会生成新的String对象,旧的栈会被JVM垃圾回收
StringBuffer和StringBuilder是字符串变量(char[] value)
都是final不可被继承
二、继承结构
三、修改区别
String:不可变字符串;(private final char[] value)
StringBuilder:可变字符序列、效率高、线程不安全;(char[] value)
StringBuffer:可变字符串、效率低、线程安全;源码如下(char[] value)
public synchronized StringBuffer append
public synchronized StringBuffer reverse
public synchronized int lastIndexOf
...
四、效率
StringBuffer比StringBuilder慢,但是线程安全
修改 StringBuffer和StringBuilder比String块
如果下面String块:String str = "abc"+"de"; StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");因为String 常量池字符串拼接相当于String str="abcde"