String、StringBuffer、StringBuilder

1.String、StringBuffer、StringBuilder三者的对比
String:不可变的字符序列;底层使用char[]存储
StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储
StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储
 
2.StringBuffer与StringBuilder的内存解析
以StringBuffer为例:
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());//
sb1.append('a');//value[0] = 'a';
sb1.append('b');//value[1] = 'b';
StringBuffer sb2 = new StringBuffer("abc");//char[] value = new char["abc".length() + 16];
//问题1. System.out.println(sb2.length());//3
//问题2. 扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。
         默认情况下,扩容为原来容量的2倍 + 2,同时将原数组中的元素复制到新的数组中。
        指导意义:开发中建议大家使用:StringBuffer(int capacity) 或 StringBuilder(int capacity)
 
3.对比String、StringBuffer、StringBuilder三者的执行效率
从高到低排列:StringBuilder > StringBuffer > String
 
4.StringBuffer、StringBuilder中的常用方法
增:append(xxx)
  将指定的字符串追加到此字符序列。实现了不同类型的xxx的方法重载。
删:delete(int start,int end)
  移除此序列的子字符串中的字符
  s.deleteCharAt(s.length()-1);
  移除此序列的子字符串中的字符
改:setCharAt(int n ,char ch) / replace(int start, int end, String str)
  使用给定 String 中的字符替换此序列的子字符串中的字符。
查:charAt(int n )
  返回此序列中指定索引处的 char 值。
插:insert(int offset, xxx)
  在指定位置插入xxx。
长度:length();
*遍历:for() + charAt() / toString()
反转:reverse()
 
关于索引:
int indexOf(String str)
  返回第一次出现的指定子字符串在该字符串中的索引。
int indexOf(String str, int fromIndex)
  从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
int lastIndexOf(String str)
  返回str 在字符串最后一次出现的位置。
int lastIndexOf(String str, int fromIndex)
  返回 String 对象中子字符串最后出现的位置。
 
关于字串
String substring(int start)
  返回一个新的 String,它包含此字符序列当前所包含的字符子序列。
String substring(int start, int end)
  返回一个新的 String,它包含此序列当前所包含的字符子序列。
 
 
posted @   kkzhang  阅读(131)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示