String 类
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。 对String的操作都是改变赋值地址而不是改变值。
StringBuffer是可变类StringBuffer是可变的、线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。 每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
StringBuilderStringBuffer和StringBuilder类功能基本相似,主要区别在于StringBuffer类的方法是线程安全的
,而StringBuilder不是线程安全的
,相比而言,StringBuilder类会略微快一点。
对于经常要改变值的字符串应该使用StringBuffer和StringBuilder类。
- String、StringBuffer、StringBuilder在JDK中都被定义为final类,这意味着他们不可以被继承。
- String性能较差,因为对String类型进行改变的时候都会重新生成一个新的String对象,这在字符串拼接操作时很明显
- 内容经常改变的字符串不应该使用String,如果不考虑多线程,则应使用StringBuilder
- StringBuffer生成一个对象后,在进行字符串拼接操作时,调用append方法即可,不会产生新的对象,仅对对象本身进行操作,性能比String要高。
- StringBuffer是线程安全的,因此适合在多线程中使用,也正因为如此,速度跟StringBuilder相比会比较慢。
- StringBuilder的使用方法跟StringBuffer类似,但其是非线程安全的,因此一般常用于单线程,效率比StringBuffer高。
注意:Java 8默认使用StringBuilder拼接字符串,所以不用显示的使用StringBuilder了,直接用“+”就可以了。