• API(3) StringBuffer类和StringBulider类


    StringBuffer
    ● StringBuffer 类概述
    我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的 String对象,既耗时,又浪费空间。而 StringBuffer 就可以解决这个问题 线程安全的可变字符序列
    ● StringBuffer String 的区别 ?
    构造方法
    public StringBuffer()
    public StringBuffer(String str)
    添加功能
    public StringBuffer append(String str)
    public StringBuffer insert(int offset,String str)
    删除功能
    public StringBuffer deleteCharAt(int index)
    public StringBuffer delete(int start,int end)
    替换功能
    public StringBuffer replace(int start,int end,String str)
    反转功能
    public StringBuffer reverse()
    截取功能
    public String substring(int start)
    public String substring(int start,int end)
    截取功能和前面几个功能的不同
    返回值类型是 String 类型,本身没有发生改变
    1. package com.ffyc.javaapi.stringdemo.buffer;
    2. public class StringBufferDemo {
    3. public static void main(String[] args) {
    4. /*
    5. 线程安全, 底层可变字符串
    6. char[] value;
    7. AbstractStringBuilder(int capacity) {
    8. value = new char[capacity];
    9. }
    10. super(16); 默认长度
    11. super(str.length() + 16); 使用传入字符串创建对象,生成的底层数组为传入的字符串长度+16
    12. 当向StringBuffer中添加内容时,是将内容添加到底层的数组中,数组没有被final修饰,
    13. 当数组装满时,会创建一个新的数组,将新数组地址给底层数组,StringBuffer对象是不会改变的.
    14. */ //new StringBuffer(30); 指定生成底层数组的长度
    15. //new StringBuffer();// 默认底层char数组长度是16
    16. /* StringBuffer stringBuffer = new StringBuffer("abcd");//20
    17. stringBuffer.append("efg111");
    18. stringBuffer.append("efg2222");
    19. stringBuffer.append("efg2222");//向末尾追加内容,当数组装满时创建新的底层数组
    20. System.out.println(stringBuffer);
    21. */
    22. StringBuffer stringBuffer = new StringBuffer("abcdefg");//23
    23. //stringBuffer.insert(2,"xx");//向指定的位置插入字符串
    24. //stringBuffer.deleteCharAt(1);//删除指定位置的字符
    25. //stringBuffer.delete(0,3);//删除指定区间的内容 包含开始,不包含结束
    26. //stringBuffer.replace(0,3, "XXX");//替换
    27. //stringBuffer.reverse();//逆序字符串
    28. //String sub = stringBuffer.substring(2);//截取从指定位置开始到结束一个字符串副本返回
    29. //String sub = stringBuffer.substring(2,5);//截取从指定位置开始到指定位置结束一个字符串副本返回
    30. //System.out.println(sub);
    31. System.out.println(stringBuffer);
    32. String s1 = "abcd";
    33. System.out.println(s1.length());//4
    34. System.out.println(stringBuffer.length());//返回的是底层数组中实际转入的字符个数
    35. stringBuffer.append("efg111");
    36. }
    37. }
    ● StringBuilder 类功能和 StringBuffer 功能完全一致 , StringBuffer 是线程安全的
    1. public class StringBuilderDemo {
    2. /*
    3. 多线程不安全 可变字符串
    4. 这两个类的区别
    5. @Override
    6. public StringBuilder append(String str) {
    7. super.append(str);
    8. return this;
    9. }
    10. @Override
    11. public synchronized StringBuffer append(String str) {
    12. toStringCache = null;
    13. super.append(str);
    14. return this;
    15. }
    16. String : 底层都是数组实现 final char[] 值不能改变, 改变后会创建一个新的对象
    17. StringBuffer : 线程安全的 可变字符串 char[]
    18. StringBuilder: 线程不安全 可变字符串
    19. */
    20. public static void main(String[] args) {
    21. // new StringBuilder();
    22. // new StringBuilder("abcd");
    23. StringBuilder stringBuilder = new StringBuilder(30);
    24. stringBuilder.append("aaa");
    25. stringBuilder.insert(2,"aaaa");
    26. }
    27. }
    ● String :是字符常量 , 适用于少量的字符串操作的情况
    ● StringBuilder :适用于单线程下在字符缓冲区进行大量操作的情况
    ● StringBuffer :适用多线程下在字符缓冲区进行大量操作的情况
  • 相关阅读:
    ESP-IDF的vscode环境编译时出现“fatal error: nvs.h: No such file or directory”的解决方法
    增益与功率:lg|dB|dBm|mW计算
    利用视觉分析技术提升水面漂浮物、水面垃圾检测效率
    SpringMVC系列-4 参数解析器
    STM32_3(GPIO)
    本地运行“李开复”的零一万物 34B 大模型
    【MySQL面试题】建立a,b,c三个字段的联合索引,判断下列语句是否使用到索引?用到了哪些索引?(通过explain的key_len来判断)
    Bert-VITS-2 效果挺好的声音克隆工具
    [HNOI2010]弹飞绵羊【LCT】
    lwIP 开发指南(中)
  • 原文地址:https://blog.csdn.net/weixin_57197500/article/details/125450269