StringBuffer与StringBuilder的常用方法及源码分析。

news2025/6/21 5:12:21

StringBuffer与StringBuilder的常用方法及源码分析

    • 1. 常用方法
    • 2. 源码分析

  StringBuffer和StringBuilder都是用于处理字符串的可变对象,它们之间的主要区别在于StringBuffer是线程安全的,而StringBuilder是非线程安全的。

1. 常用方法

  • append():用于将指定的字符串追加到StringBuffer或StringBuilder的末尾。
  • insert():用于将指定的字符串插入到指定位置。
  • delete():用于删除指定范围内的字符。
  • replace():用于替换指定范围内的字符序列。
  • reverse():用于反转字符串。
  • substring():用于获取子字符串。
  • length():用于获取字符串的长度。
  • charAt():用于获取指定位置的字符。
public class StringBufferStringBuilderExample {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer("Hello");
        StringBuilder stringBuilder = new StringBuilder("World");

        // 使用append方法追加字符串
        stringBuffer.append(" ");
        stringBuffer.append("Java");

        stringBuilder.append(" ");
        stringBuilder.append("Programming");

        System.out.println("StringBuffer content: " + stringBuffer.toString());
        System.out.println("StringBuilder content: " + stringBuilder.toString());

        // 使用insert方法插入字符串
        stringBuffer.insert(5, "Good ");
        stringBuilder.insert(6, "Awesome ");

        System.out.println("StringBuffer after insert: " + stringBuffer.toString());
        System.out.println("StringBuilder after insert: " + stringBuilder.toString());

        // 使用delete方法删除字符串
        stringBuffer.delete(5, 10);
        stringBuilder.delete(6, 13);

        System.out.println("StringBuffer after delete: " + stringBuffer.toString());
        System.out.println("StringBuilder after delete: " + stringBuilder.toString());
    }
}

2. 源码分析

  • StringBuffer和StringBuilder底层都是使用字符数组(char[])来存储字符串内容。
    在这里插入图片描述
    在这里插入图片描述

  • StringBuffer的关键方法都使用了 synchronized 关键字来实现线程安全。
    在这里插入图片描述

  • StringBuilder没有使用 synchronized 关键字,因此性能更高,但不适合在多线程环境中使用。
    在这里插入图片描述


上一篇 面试官:说一说Map不同实现类的对比以及使用场景。
欢迎点赞、收藏、评论!!!
下一篇 面试官:说说Set不同实现类的对比及Set无序性、不可重复性的原理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1503288.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用jar命令删除.jar文件中的重复的类和目录并重新打包

引言: android项目,引入的 .jar包 和 .aar中 有相同的类,导致编译冲突,由于这些依赖项没有上传到Maven仓库,无法使用 exclude 排除,只能尝试修改jar文件,删除重复的代码,再重新打包…

【深度学习笔记】6_8 长短期记忆(LSTM)

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图 6.8 长短期记忆(LSTM) 本节将介绍另一种常用的门控循环神经网络:长短期记忆(long shor…

qt自绘标尺,鼠标拖动画线测量两点距离

效果如图: 图像显示窗口元素组成: 图像显示窗口整体构成: 长度测量窗口ui: 思路: 首先自定了一个RulerWidget,其中有一个布局,布局中包含自定义的水平Ruler、自定义垂直Ruler、单位QLab…

洗地机怎么选|洗地机哪款好用?添可、希亦、美的洗地机哪个最耐用质量好?

在现代生活中,屋内清洁是一项必不可少的工作,但也是一项费时费力的工作。随着科技的进步,家庭清洁工具也正经历着革命性的变革。洗地机,一种集吸尘、拖地、清洗于一体的智能家居清洁工具,正逐渐成为现代家庭必备的家电…

15. 三数之和 - 力扣

1. 题目 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 …

华容道问题求解_详细设计(四)之查找算法2_BFS

(续上篇) 利用BFS查找,会找到最短路径(没有权重的图),这个道理比较简单,这是由于寻找路径的方法都是从起点或者接近起点的位置开始的。查找过程如果画出图来,类似于一圈圈的放大&…

C++初阶:类与对象(中篇)

目录 2. 类的六个默认成员函数2.1 构造函数2.1.1 构造函数的定义方式 2.2 析构函数2.2.1 析构函数定义方式 2.3拷贝构造函数2.3.1 拷贝构造函数的定义方式2.3.2 深拷贝与浅拷贝 2.4 赋值运算符的重载2.4.1 运算符重载2.4.2 运算符的重载的定义方式2.4.3 默认成员函数&#xff1…

Redis 常见数据类型(对象类型)和应用案列

前言: 每次你在游戏中看到玩家排行榜,或者在音乐应用中浏览热门歌单,有没有想过这个排行榜是如何做到实时更新的?当然,依靠 Redis 即可做到。 在技术领域,我们经常听到「键值存储」 这个词。但在 Redis 的世界里&…

VBA技术资料MF128:批量创建文件夹及子文件夹

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

低密度奇偶校验码LDPC(十)——LDPC码的密度进化

一、密度进化的概念 二、规则LDPC码的密度进化算法(SPA算法) 算法变量表 VN更新的密度进化 CN更新的密度进化 算法总结 程序仿真 参考文献 [1] 白宝明 孙韶辉 王加庆. 5G 移动通信中的信道编码[M]. 北京: 电子工业出版社, 2018. [2] William E. Ryan, Shu Lin. Channel Co…

【C语言】linux内核ip_local_out函数

一、讲解 这个函数 __ip_local_out 是 Linux 内核网络子系统中的函数,部分与本地出口的 IPv4 数据包发送相关。下面讲解这段代码的每一部分: 1. 函数声明 int __ip_local_out(struct net *net, struct sock *sk, struct sk_buff *skb): -…

AcWing 1262. 鱼塘钓鱼(每日一题)

目录 暴力枚举法: 贪心: 原题链接:1262. 鱼塘钓鱼 - AcWing题库 有 N个鱼塘排成一排,每个鱼塘中有一定数量的鱼,例如:N5 时,如下表: 鱼塘编号12345第1分钟能钓到的鱼的数量&…

k8s-生产级的k8s高可用(2) 25

部署containerd k8s2、k8s3、k8s4在配置前需要重置节点(reset)在上一章已完成 禁用所有节点docker和cri-docker服务 所有节点清除iptables规则 重置后全部节点重启 由于之前部署过docker,因此containerd默认已安装 修改配置 启动containe…

专业140+总分430+西南交通大学924信号与系统考研经验电子信息与通信工程,真题,大纲,参考书

今年报考西南交通大学,考研分数专业课924信号与系统140,总分430,各门分数都还是比较均衡,经过一年的复习,有得有失,总结一下自己的复习经历,希望给大家有点帮助,在复习中做的更好&am…

十七、IO流——综合练习

综合练习 目录 一、制造假数据1.1自己写代码1.2 利用糊涂包生成假数据 二、随机点名器2.1随机点名器12.2 随机点名器22.3 随机点名器32.4 随机点名器42.5 随机点名器5 三、登录注册3.1 登录注册13.2 登录注册23.3 登录注册3 一、制造假数据 需求:制造假数据也是开发…

BadUsb制作

BadUsb制作 一个树莓派pico kali监听 需要的文件 https://pan.baidu.com/s/1_kyzXIqk9JWHGHstTgq7sQ?pwd6666 1.将pico插入电脑 2.将Bad USB固件中的文件复制到pico中,pico会重启 3.将Bad USB目录文件复制进去(打开Bad USB目录文件复制) …

MySQL--explain执行计划详解

什么是执行计划? SQL的执行计划,通俗来说就是SQL的执行情况,一条SQL语句扫描哪些表,那个子查询先执行,是否用到了索引等等,只有当我们知道了这些情况之后才知道,才可以更好的去优化SQL&#xf…

如何将MathType嵌入到word中 word打开MathType显示错误

当我们编辑好mathtype公式以后,有时候需要将这个公式导入到word中,但是有不少用户们不清楚mathtype如何嵌入到word中。今天小编就给大家说明一下mathtype公式导入word的两种不同方法,有需要的用户们赶紧来看一下吧。 一、mathtype如何嵌入到…

(产品之美系列三)小红书投票组建,利用用户好奇心,增大互动

小红书发布笔记或者视频,可以带一个投票功能。此投票功能与其他的有什么不同呢? 发布一个话题:你觉得王维和李白哪个更帅? 如果你自己不投票,就是看不到结果。当你投票之后: 可以知道选择王维的有百分之八十二。 启发:小红书投…

Git分布式管理-头歌实验远程版本库

Git的一大特点就是,能为不同系统下的开发者提供了一个协作开发的平台。而团队如果要基于Git进行协同开发,就必须依赖远程版本库。远程版本库允许,我们将本地版本库保存在远端服务器,而且,不同的开发者也是基于远程版本…