一、三者特点:
- String:不可变字符串、字符串是常量、创建后不可更改
- StringBuffer: 可变字符串、线程安全、做线程同步检查、效率慢
- StringBuilder: 可变字符串、线程不安全、不做线程同步检查、效率快
- StringBuffer、StringBuilder 两者常用方法:
1.append() 2.insert() 3.delete() 4.deleteCharAt()
二、StringBuffer 与 StringBuilder 的区别:
1、StringBuffer 与 StringBuilder 中的方法和功能完全是等价的。
2、只是 StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。
3、在单线程程序下,StringBuilder 效率更快,因为它不需要加锁,不具备多线程安全。而 StringBuffer 则每次都需要判断锁,效率相对较低。
- 注意事项:
用循环进行字符串拼接时要用 StringBuilder,千万不能用 String。
原因:String 为不可变字符串,每添加一个字符就是创建一个对象,大大消耗内存和运行时间。
String 类中的 value【】数组是 final 修饰的,一经创建就不能再改变,同时 String 也没有提供相应的方法让我们去修改 value 指向的数组元素,所以改变的话是创建新的对象,StringBuilder 和 StringBuffer 就有提供方法可以修改 value 指向的数组元素,这也是 StringBuilder 和 StringBuffer 字符串可变的原因。
/** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0