java的StringBuffer类和StringBuilder类

目录

  • StringBuffer
    • StringBuffer简介
    • StringBuffer类的继承关系
    • StringBuffer类的底层实现
    • 创建StringBuffer对象
    • StringBuffer类的常用方法
  • StringBuilder
    • StringBuilder简介



StringBuffer

StringBuffer简介

StringBuffer对象是一个字符序列可变的字符串(String类不可变)。它和StringBuilder类似,但是StringBuffer是线程安全的(应用于多线程不会冲突)。
和String一样,StringBuffer类也是一个final类

如果需要频繁的改变字符串的内容,就应该选择StringBuffer类或者StringBuilder类。因为这2个类只会在字符缓冲区容量满的时候,才会重新开辟内存空间



StringBuffer类的继承关系

StringBuffer类直接实现了两个接口:Serializable、Comparable。StringBuffer又继承了AbstractStringBuilder类AbstractStringBuilder类实现了CharSequence接口和Appendable接口(也就是StringBuffer间接实现了这2个接口,一共实现了4个接口)。

继承关系图为
在这里插入图片描述



StringBuffer类的底层实现

和String类类似,StringBuffer类也是通过byte[]数组存储可变字符序列。因此StringBuffer对象存储的每个字符也占1个字节
和String类不同的是,StringBuffer类的byte[]数组没用final修饰。



创建StringBuffer对象

介绍常用构造器:

  1. public StringBuffer(); 创建一个字符序列为空的字符缓冲区,初始容量为16个字符。
  2. public StringBuffer(int capacity); 创建一个不带字符,但具有指定初始容量的字符串缓冲区。
  3. public StringBuffer(String str); 创建一个字符串缓冲区,其字符序列为指定的字符串参数。缓冲区初始容量为16+字符串参数的长度。 如果str = null,会抛出NullPointerException异常。


StringBuffer类的常用方法

  1. public StringBuffer append(String str); 把指定的字符串加到此字符序列的末尾。如果str = null,就把null转换为"null"存储进StringBuffer。
  2. public int capacity(); 返回缓冲区当前容量。
  3. public char charAt(int index); 返回字符序列指定索引位置的字符。
  4. public int indexOf(String str); 返回第一次出现相同值的子字符串的首字符索引。
  5. public StringBuffer delete(int start, int end); 移除[start, end)中的字符,并返回该字符串。
  6. public StringBuffer replace(int start, int end, String str); 用传入的字符串替换指定位置部分[start, end)的子字符串。
  7. public StringBuffer insert(int offset, Object obj); 将Object参数存储的字符串插入到字符序列中,从offset位置前开始插入。
  8. public int length(); 返回字符序列的字符长度。


StringBuilder

StringBuilder简介

StringBuilder和StringBuffer的用途几乎是一样的。只是StringBuilder在多线程中不安全,但效率比StringBuffer更高

StringBuilder和StringBuffer很很多相似点,比如都是final类,继承体系都一样,底层都是用byte[]数组存储字符序列。

可以这样理解:如果是单线程环境就首选StringBuilder,这样效率更高;多线程就选StringBuffer,保证同步。



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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java中Integer方法

先进行专栏介绍 本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记 进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行…

springboot快速整合Memcached缓存技术

目录 Memcached基本介绍 Memcached安装 springboot技术整合 规范化定义配置属性 Memcached基本介绍 memcached是一套分布式的快取系统,与redis相似,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki&#xff…

道本科技受邀参加建筑产业互联网推动建筑产业现代化体系构建座谈会,以数字化产品为建筑行业注入新动能!

2023年7月底,道本科技作为中国建筑业协会合作伙伴,受邀参加了建筑产业互联网推动建筑产业现代化体系构建座谈会。在这次座谈会上,道本科技旗下产品“合规数”“合同智能审查”和“智合同范本库”被中国建筑(中小企业)产…

【笔记】第94期-冯永吉-《湖仓集一体关键技术解读》-大数据百家讲坛-厦大数据库实验室主办20221022

https://www.bilibili.com/video/BV1714y1j7AU/?spm_id_from333.337.search-card.all.click&vd_sourcefa36a95b3c3fa4f32dd400f8cabddeaf

后端进阶之路——万字总结Spring Security与数据库集成实践(五)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄,vue成神之路★ ★ 解决算法,一个专栏就够了★ ★ 架…

JavaScript-DOM

目录 DOM 访问节点 节点信息 操作节点 DOM DOM:Document Object Model( 文档对象模型) 访问节点 使用 getElement系列方法访问指定节点 getElementById()、getElementsByName()、getElementsByTagName()根据层次关系访问节点 节点属性 属…

jmeter使用步骤

jmeter 使用步骤 1,进入jmeter目录中的bin目录,双击jmeter.bat 打开 2,右键test plan 创建线程组 3,配置线程组参数 4,右键刚刚创建的线程组,创建请求,填写请求地址 5,需要携带to…

AI让分子“起死回生”:拯救抗生素的新希望

生物工程师利用人工智能(AI)使分子“起死回生”[1]。 为实现这种分子“复活”,研究人员应用计算方法对来自现代人类(智人)和我们早已灭绝的远亲尼安德特人和丹尼索瓦人的蛋白质数据进行分析。这使研究人员能够鉴定出可以杀死致病细菌的分子,从而促进研发用于治疗人类…

11. 使用tomcat中碰到的一些问题

文章目录 问题一:Tomcat的startup.bat启动后出现乱码问题二:一闪而退之端口占用问题三:非端口问题的一闪而退问题四:服务器的乱码和跨域问题问题五: 在tomcat\webapps\下创建文件夹为什么tomcat重启就会丢失问题六:Tom…

大后台,小前台——组合式创新加速推进产教融合

2023年8月1日,由成都知了汇智科技有限公司组织召开的“2023产教融合项目推进闭门研讨会”于成都市高新区软件园G8区7楼正式举行,本次会议基于“产业链的用人需求、资本链的回报诉求、服务链的价值要求、教育链的延伸需求”进行交流探讨,形成稳…

区块链实验室(17) - FISCO BCOS的P2P网络层分析

首先启动FISCO BCOS的示例网络,即4个节点的强连通网络。每个节点与其余3个节点存在网络连接。 打开控制台,可以看到当前有21个区块。 其中1个节点的P2P端口是30301,监测这个节点的端口。 该端口的部分流量见下图所示。白底部分是某1秒钟接收到…

【雕爷学编程】Arduino动手做(184)---快餐盒盖,极低成本搭建机器人实验平台

吃完快餐粥,除了粥的味道不错之外,我对个快餐盒的圆盖子产生了兴趣,能否做个极低成本的简易机器人呢?也许只需要二十元左右 知识点:轮子(wheel) 中国词语。是用不同材料制成的圆形滚动物体。简…

Java源码解析-重点集合框架篇

Java 源码解析,集合篇 一:故事背景二:数据结构2.1 线性结构2.2 非线性结构 三:集合分类3.1 结构图 三:详细分析3.1 List3.1.1 ArrayList3.1.1.1 底层结构3.1.1.2 主要特点 3.1.2 LinkedList3.1.2.1 底层结构3.1.2.2 主…

简单易懂的Transformer学习笔记

1. 整体概述 2. Encoder 2.1 Embedding 2.2 位置编码 2.2.1 为什么需要位置编码 2.2.2 位置编码公式 2.2.3 为什么位置编码可行 2.3 注意力机制 2.3.1 基本注意力机制 2.3.2 在Trm中是如何操作的 2.3.3 多头注意力机制 2.4 残差网络 2.5 Batch Normal & Layer Narmal 2.…

VBA技术资料MF40:VBA_计数筛选状态的数据行数

【分享成果,随喜正能量】人唯有与喜欢的事物发展关系,不管是人或者是物还是事,包括喜欢自己外表、个性的部分,喜欢自己做的事,喜欢自己的创造,喜欢的风景……才给人带来对自己的认同。在与喜欢的事物互动关…

yolo-v5学习(使用yolo-v5进行安全帽检测错误记录)

常见错误 跑YOLOv5遇到的问题_runtimeerror: a view of a leaf variable that requi_Pysonmi的博客-CSDN博客 python train.py --img 640 --batch 16 --epochs 10 --data ./data/custom_data.yaml --cfg ./models/custom_yolov5.yaml --weights ./weights/yolov5s.pt 1、梯度…

C# 简单模拟 程序内部 消息订阅发布功能

文章目录 前言模拟消息订阅发布使用注意事项 前言 我想做个简单的消息发布订阅功能,但是发现好像没有现成的工具类。要么就是Mqtt这种消息订阅发布。但是我只想程序内部进行消息订阅发布,进行程序的解耦。那没办法了,只能自己上了 模拟消息…

【LeetCode】094. 分割回文串II

文章目录 1. 解题思路1.1 创建dp表1.2 状态转移方程1.3 提前求出所有子串是否是回文串 2. 整体代码 1. 解题思路 1.1 创建dp表 这道题我们使用动态规划的方法来解,首先创建一个大小为字符串长度的dp表。dp[i] 表示 s[0, i] 的字符串最小划分多少次可以全划分为回文…

Matlab对TMS320F28335编程--SVPWM配置互补PWM输出

前言 F28335中断 目的:FOC的核心算法及SVPWM输出,SVPWM的载波频率10kHz,SVPWM的每个周期都会触发ADC中断采集相电流,SVPWM为芯片ePWM4、5、6通道,配置死区 1、配置中断SVPWM进ADC中断,查上表知CPU1,PIE1 …

时间复杂度接近O(n)的三种排序算法

1.桶排序 桶排序,顾名思义,会用到“桶”,核心思想是将要排序的数据分到几个有 序的桶里,每个桶内的数据再单独进行排序。桶内排完序之后,再把每个桶内的数据按照顺序依次 取出,组成的序列就是有序的了。 …