• 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 :适用多线程下在字符缓冲区进行大量操作的情况
  • 相关阅读:
    计及电池储能寿命损耗的微电网经济调度(matlab代码)
    长连接和短连接
    JAVA代码审计-json web token 安全分析
    【100个 Unity实用技能】| Unity中常用的几种路径 分析,不同平台路径总结
    ASP.NET Core 产生连续 Guid
    drawio快捷键
    【深度学习】Pytorch torch.autograd 自动差分引擎
    【ADI低功耗2k代码】基于ADuCM4050的ADXL363、TMP75的加速度、温度检测及串口打印、蜂鸣器播放音乐(孤勇者)
    C语言【文件】
    Java版本spring cloud + spring boot企业电子招投标系统源代码
  • 原文地址:https://blog.csdn.net/weixin_57197500/article/details/125450269