StringBuffer和StringBuilder区别

StringBuffer和StringBuilder区别
康弟弟1.字符修改上的区别
①当我们需要对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
②和 String 类不同的是,StringBuffer 和 StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象,可以减少对内存的使用。
③StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
④由于 StringBuilder 相较于 StringBuffer 有速度优势,多数情况下建议使用 StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类,由于 StringBuffer 操作字符串的方法加了 synchronized 关键字进行了同步,主要是考虑到多线程环境下的安全问题,所以如果在非多线程环境下,执行效率就会比较低,因为加了没必要的锁。
2.相同点
2.1 初始容量
初始容量都是16和扩容机制都是”旧容量*2+2”
2.2 底层原理
都是用char[]字符数组实现,且字符数组都是可变的,这点不同于String
3. 常用方法
StringBuilder
| 方法名 | 介绍 |
|---|---|
| append(int i) | 将 int 参数的字符串表示形式追加到此序列。 |
| append(long lng) | 将 long 参数的字符串表示形式追加到此序列。 |
| append(Object obj) | 追加 Object 参数的字符串表示形式。 |
| append(String str) | 将指定的字符串追加到此字符序列。 |
| append(StringBuffer sb) | 将指定的 StringBuffer 追加到此序列。 |
| capacity() | 返回当前容量。 |
| length() | 返回长度(字符数)。 |
| insert(int offset, boolean b) | 将 boolean 参数的字符串表示形式插入此序列中。 |
| insert(int offset, char c) | 将 char 参数的字符串表示形式插入此序列中。 |
| insert(int offset, char[] str) | 将 char 数组参数的字符串表示形式插入此序列中。 |
| insert(int offset, double d) | 将 double 参数的字符串表示形式插入此序列中。 |
| insert(int offset, float f) | 将 float 参数的字符串表示形式插入此序列中。 |
| insert(int offset, int i) | 将 int 参数的字符串表示形式插入此序列中。 |
| insert(int offset, long l) | 将 long 参数的字符串表示形式插入此序列中。 |
| insert(int offset, String str) | 将字符串插入此字符序列中。 |
| replace(int start, int end, String str) | 使用给定 String 中的字符替换此序列的子字符串中的字符。 |
| delete(int start, int end) | 移除此序列的子字符串中的字符。 |
| deleteCharAt(int index) | 移除此序列指定位置上的 char。 |
| reverse() | 将此字符序列用其反转形式取代。 |
| toString() | 返回此序列中数据的字符串表示形式。 |
| substring(int start, int end) | 返回一个新的 String,它包含此序列当前所包含字符的子序列 |
StringBuffer
4. 总结
StringBuffer与StringBuilder用法基本相同,在不考虑线程安全的情况下可以互相通用。
评论
匿名评论隐私政策














