【Java】StringBuffer和StringBuilder

1.String、StringBuffer、StringBuilder三者对比

底层都使用char[]数组存储数据。

  • String:不可变的字符序列。
  • StringBuffer:可变的字符序列,线程安全的,效率低。
  • Stringbuilder:可变的字符序列,jdk5.0新增的,线程不安全的,效率高。

2.内存解析

注释对应底层创建的char[]数组。

String string = new String();   //char[] value = new char[0];
String abc = new String("abc"); //char[] value = new char[]{'a','b','c'};

StringBuffer sb = new StringBuffer();   //char[] value = new char[16]; 底层创建了一个长度是16的数组

StringBuffer sb2 = new StringBuffer("abc"); //char[] value = new char["abc".length()+16];
System.out.println(sb2.length());   //3

如果添加的数据底层数据盛不下了,那就需要扩容底层的数组。
默认情况下,扩容为原来容量的2倍+2,同时将原数组中的元素复制到新数组中。

开发中建议使用:StringBuffer(int capacity)或StringBuilder(int capacity)

3.string、StringBuffer、StringBuilder三者的执行效率

从高到低:StringBuilder > StringBuffer > String

4.StringBuffer、StringBuilder中的常用方法

  • 增:append(xxx)
  • 删:delete(int start,int end)
  • 改:setCharAt(int n,char ch)/replace(int start,int end,String str)
  • 查:charAt(int n)
  • 插:insert(int offset,xxx)
  • 长度:length()
  • 遍历:for()+charAt()toString()

String类和StringBuffer类都用final修饰,为什么Stringbuffer是可变的?

参考链接:
1.StringBuffer是可变的还是不可变的?
2.StringBuffer和StringBuilder的区别

posted @ 2022-11-23 09:21  植树chen  阅读(20)  评论(0编辑  收藏  举报