String:
String对象初始化之后不可变
线程安全
简单的字符串操作使用String效率更高
StringBuffer:
StringBuffer对象初始化之后可改变
线程安全
频繁的字符串操作可以使用StringBuffer
StringBuilder:
StringBuilder对象初始化之后可改变
线程不安全
频繁的字符串操作可以使用StringBuilder
补充:
1.常见的String变化指的是引用变量的改变,引用变量指向新生成的对象的地址。
2.
String temp = "abc";
String str = new String("abc")
temp指向在常量池中的,
str指向堆上的,
而str内部的char[] value则指向常量池中的char[] value
3.对于字符串比较频繁的进行操作,不建议使用String,消耗内存
4.jdk1.5开始,用加号来拼接字符串隐式改成使用StringBuilder连接
5.因为java中对于String的使用非常频繁,为了避免一个系统中产生大量的String对象,引入了字符串常量池
6.StringBuffer和StringBuilder进行末尾追加操作时,可能存在一个内存空间的扩容
7.使用反射的原理可以改变String对象的值。