目录
- ⛳ StringBuffer and StringBuilder 处理字符串
- 🎨 一,简介
- 🏭 二,常用方法
- 🚜 三 ,`StringBugger`
- 🐾 四,`StringBuilder`
- ⭐ 五,`StringBuffer`和`StringBuilder`面试
⛳ StringBuffer and StringBuilder 处理字符串
当我们处理字符序列是,经常需要进行字符串的拼接,替换,插入和删除等操作。Java提供了两个用于处理可变字符串的类:
StringBuffer和StringBuilder。他们都是属于java.lang包,提供了一系列方法来修改字符串内容。
StringBuffer和StringBuilder的作用是相同的,都可以用于构建和修改字符串。他们的区别在于线程安全性和性能。
🎨 一,简介
-
当
append()和insert()时,如果原来的value数组长度不够,可扩容。- 扩容原理:
/*** For positive values of {@code minimumCapacity}, this method* behaves like {@code ensureCapacity}, however it is never* synchronized.* If {@code minimumCapacity} is non positive due to numeric* overflow, this method throws {@code OutOfMemoryError}.*/private void ensureCapacityInternal(int minimumCapacity) {// overflow-conscious codeif (minimumCapacity - value.length > 0) {value = Arrays.copyOf(value,newCapacity(minimumCapacity));}} -
StringBuffer和StringBuilder中的方法支持方法链操作-
方法链原理:
@Overridepublic StringBuilder append(String str) {super.append(str);return this;} // return this 返回对象本身
-
🏭 二,常用方法
StringBuffer和StringBuilder中的方法都是类似的。
StringBuffer append(xxx): 提供了很多的append()重载方法,用于进行字符串拼接。StringBuffer delete(int start, int end):删除指定位置的内容。StringBuffer replace(int start, int end, String str):把[start,end)位置替换成为str。StringBuffer insert(int offset, xxx):在指定位置插入xxx。StringBuffer reverse():把当前字符串序列逆转 。public int indexOf(String str):返回指定字符串出现的索引。public String substring(int start, int end):用于从字符串中提取子字符串的方法。它返回原始字符串中指定位置范围内的子字符串。public int length():返回字符串的长度。public char charAt(int n):返回指定索引的字符。public void setCharAt(int n, char ch):设置指定索引处的字符。
🚜 三 ,StringBugger
StringBuffer是线程安全的,适合在多线程环境下使用。由于它的方法是同步的,保证了多个线程同时访问时的数据安全。然而,同步操作会带来一定的性能损失。因此,在单线程环境下,使用StringBuilder性能更好。
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
sb.insert(5, ",");
sb.delete(3, 6);
sb.replace(6, 11, "Java");
System.out.println(sb.toString()); // 输出:Helo, Java
🐾 四,StringBuilder
StringBuilder是非线程安全的,适合在单线程环境下使用,由于没有同步操作,他的性能比StringBuffer更高。因此,在单线程环境下,推荐使用StringBuilder。
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
sb.insert(5, ",");
sb.delete(3, 6);
sb.replace(6, 11, "Java");
System.out.println(sb.toString()); // 输出:Helo, Java
⭐ 五,StringBuffer和StringBuilder面试
-
StringBuffer和StringBuilder非常类似,均代表可变的字符序列,而且提供相关的方法也一样。 -
面试题:对比
String、StringBuffer、StringBuilder-
String(JDK 1.0):是不可变字符序列final value[]
-
StringBuffer(JDK 1.0):可变的字符序列、效率低、线程安全
-
StringBuilder(JDK 5.0):可变字符序列、效率高、线程不安全
-
