首页 > 其他 > 详细

StringBuffer与Stringbuilder

时间:2021-04-07 15:05:08      阅读:11      评论:0      收藏:0      [点我收藏+]

1.方法

增: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()

2面试题:String,StringBuffer,StringBuilder三者的异同?
不同点:
String:不可变的字符序列;
StringBuffer:可变的字符序列;线程安全的,效率偏低。
StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高。
相同点:底层都是char[]存储

源码分析:
String str=new String();//char[] value=new char[0];
String str1=new String("abc");//char[] value=new char[]{‘a‘,‘b‘,‘c‘};

StringBuffer sb1=new StringBuffer();//char[] value=new char[16];底层创建了一个长度是16的数组。
System.out.println(sb1.length());//0
sb1.append(‘a‘);//value[0]=‘a‘;
sb1.append(‘b‘);//value[1]=‘b‘;

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

//问题一:System.out.println(sb2.length());//3  有效长度
//问题2:扩容问题:如果要添加的数据底层数组存不下了,那就需要扩容底层的数组
默认情况下,扩容为原来容量的2倍+2,同时将原有数组中的元素复制到新的数组中。

  指导意义:开发中建议大家使用:StringBuffer(int capacity)//开始时就设置长度,避免扩容
  或者StringBuilder(int capacity)

StringBuffer与Stringbuilder

原文:https://www.cnblogs.com/2719610441qqcom/p/14627377.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!