1、不可变String
String对象是不可变的,String类型的引用指向的内容,一经创建就不能发生改变了。不可变性会带来一定的效率问题。为String对象重载了“+”操作符,被赋予了特殊的意义。(“+”“+=”Java中仅有的两个重载了的操作符)
2、StringBuilder
StringBuilder是一个可变的字符序列,该类被设计用作 StringBuffer
的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer
要快。将 StringBuilder
的实例用于多个线程是不安全的。
3、StringBuffer
StringBuffer是线程安全的可变字符序列。一个类似于 String
的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
总结
String对象在用“+”进行拼接时,会使用StringBuilder进行操作。因为StringBuilder 效率更好。
这三个中,只有StringBuffer 是线程安全的。
使用场景
String适用于少量的字符串操作的情况,StringBuilder适用于单线程下在字符缓冲区进行大量操作的情况,StringBuffer适用多线程下在字符缓冲区进行大量操作的情况