31 StringBuffer 类
-
StringBuffer 是可变的字符序列
-
很多方法与String相同
-
作为参数传递时,方法内部可以改变值
String 、StringBuffer、StringBuilder三者的异同
String:不可变的字符序列,底层用char[]存储
StringBuffer:可变的字符序列;线程安全的,效率低,底层用char[]存储
三者之间的转换
String ----> StringBuffer、StringBuilder: 调用StringBuffer、StringBuilder构造器
StringBuffer、StringBuilder----->String : 调用String 构造器 \ StringBuffer、StringBuilder 的toString()方法
源码分析
String
String str = new String();//char[] value = new char[0];
String str1 = new String("abc");//char[] value = new char[]{'a','b','c'};
StringBuffer
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,同时将原来数组中的元素复制到新的数组中
指导意义:开发中建议大家使用:StringBuffer(int capacity) 或 StringBuilder(int capacity)
StringBuffer类的常用方法
StringBuffer append(xxx)
:提供了很多的append()方法,用于进行字符串拼接
StringBuffer s1 = new StringBuffer("abc");
s1.append(1);
s1.append('1');
System.out.println(s1);//abc11
StringBuffer delete(int start,int end)
:删除指定位置的内容
s1.delete(2,4);
System.out.println(s1);//ab1
StringBuffer replace(int start, int end,String str)
:把[start,end)位置替换为str
s1.replace(2,4,"hello");
System.out.println(s1);//abhello1
StringBuffer insert(int offset, xxx)
:在指定位置插入xxx
s1.insert(2,false);
System.out.println(s1);//abfalsec11 插入不是替换
StringBuffer reverse()
:把当前字符序列逆转
s1.reverse();
System.out.println(s1);//11cba
public int indexof(String str)
:返回指定子字符串在此字符串中第一次出现处的索引
public String substring(int start,int end)
:返回一个从start到end索引结束的左闭右开的子字符串
String s2 = s1.substring(1, 3);
System.out.println(s2);//bc
public int length()
public char charAt(int n )
public void setcharAt(int n ,char ch)
s1.setCharAt(0,'m'); System.out.println(s1);//mbc11
总结:
增: 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()
三者的效率
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)