由于 String 中维护的是 final 修饰的 char[],每次修改后都会创建新对象,所以 String 不适合频繁的修改。
而 StringBuffer 和 StringBuilder 中维护的是可变的 char[],所有的增删改都在 char[] 上操作,所以性能非常高。
- 相同点:功能和用法基本一样
方法名 | 作用 |
---|---|
append() | 在尾部添加字符串 |
insert() | 插入字符串 |
delete() | 删除字符串 |
replace() | 替换字符串 |
reverse() | 反转字符串 |
indexOf() | 根据索引返回字符 |
- 不同点:
- StringBuffer:
-
线程安全,其中修改的方法都由synchronized进行修饰
-
修改的方法中,都有 toStringCache = null。toStringCache 的作用是将 toString() 进行缓存,如果做了修改,就将 toStringCache 设置为 null,并重新生成并返回,反之就直接返回 toStringCache
-
- StringBuilder:线程不安全,因为方法没有用synchronized加锁,所以性能较快
- StringBuffer: