常用类

56 阅读1分钟

StringBuffer和StringBuilder

String,StringBuffer,StringBuilder的异同:

String:不可变的字符序列。

StringBuffer:可变的字符序列,线程安全的,效率低。

StringBuilder:可变的字符序列,线程不安全的,效率高。

底层都是使用char[]存储。

StringBuffer分析

StringBuilder和StringBuffer只是差一个线程安全与否,底层实现都是一样的。

  1. new无参StringBuffer,底层默认创建了一个长度为16的数组
StringBuffer sb1 = new StringBuffer();
System.out.println(sb1.length()); //0
  1. 扩容问题:如果要添加的数据底层装不下了,需要扩容底层数组。默认情况下,扩容为原来容量的的2倍 + 2,同时将原有数组的元素复制到新的数组中。

    ​ 所以开发中建议使用StringBuffer(int capacity)StringBuilder(int capacity),避免扩容降低效率。

小tips

length(),length,size()的区别:

  • length():用于返回字符串的长度。
  • length:数组的属性,代表数组长度。
  • size():返回集合中元素的个数。

常用方法

StringBuilder同。

StringBuffer append(xxx):用于进行字符串拼接。

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() :把当前字符序列逆转。