StringBuffer与StringBuilder的区别

news2024/11/24 15:51:46

 

🏆今日学习目标:

🍀StringBuffer与StringBuilder的区别
创作者:林在闪闪发光
⏰预计时间:30分钟
🎉个人主页:林在闪闪发光的个人主页

 🍁林在闪闪发光的个人社区,欢迎你的加入: 林在闪闪发光的社区

目录

StringBuffer与StringBuilder的区别

1、String,StringBuffer与StringBuilder

2、StringBuffer与StringBuilder的区别

 StringBuffer

StringBuffer中的常用方 法

添加

删除

替换

插入

长度

StringBuffer练习题


 你要努力 你自己想要的东西要自己给自己.

You have to work hard to give yourself what you want.

 

 

其实主要不是想说 StringBuffer与StringBuilder的区别 想详细说一下StringBuffer的用法

但是没关系 一起说了把 首先我们看一张图

StringBuffer与StringBuilder的区别

 

1、String,StringBuffer与StringBuilder

String字符串常量

String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。

StringBuffer与StringBuilder是字符串变量

StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象 

2、StringBuffer与StringBuilder的区别

StringBuffer:可变字符串、效率低、线程安全;

StringBuilder:可变字符序列、效率高、线程不安全;

StringBuffer(JDK1.0)

StringBuffer:字符串变量(Synchronized,即线程安全)。
如果要频繁对字符串内容进行修改,考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString()方法。
StringBuffer 上的主要操作是 append 和 insert 方法
可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端
insert 方法则在指定的点添加字符。
例如,如果 x 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 x.append("le") 会使字符串缓冲区包含“startle”,而 x.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。

StringBuilder(JDK5.0) 

StringBuilder:字符串变量(非线程安全)。在内部,StringBuilder对象被当作是一个包含字符序列的变长数组。
其构造方法如下:
构造方法 描述
StringBuilder() 创建一个容量为16的StringBuilder对象(16个空元素)
StringBuilder(CharSequence cs)  创建一个包含cs的StringBuilder对象,末尾附加16个空元素
StringBuilder(int initCapacity) 创建一个容量为initCapacity的StringBuilder对象
StringBuilder(String s) 创建一个包含s的StringBuilder对象,末尾附加16个空元素
在大部分情况下,StringBuilder > StringBuffer

 

使用原则:

如果要操作少量的数据,用String ;

单线程操作大量数据,用StringBuilder ;

多线程操作大量数据,用StringBuffer。

不要使用String类的"+"来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类

 StringBuffer

StringBuffer是String的增强类

1.StringBuffer的直接父类是AbstractStringBuilder

2.StringBuffer实现了Serializable 即StringBuffer的对象可以串行化

3.在父类中 AbstractStringBuilder 有属性 char[] value,不是final

在该value数组存放字符串内容,引出存放在堆中的

4.StringBuffer 是一个final类 不能被继承

5.StringBuffer是存放在 char[] value ,所有的变化 不用每次创建新对象,更换地址所以效率高于String

StringBuffer 构造器默认为初始化16个字符

StringBuffer中的常用方 法

 

添加

首先我们需要创建一个StringBuffer对象

可以有初始值

添加语法:StringBuffer对象.append(插入的string值)

StringBuffer string = new StringBuffer("hello,")
string.append("world")
//输出为  hello,world
//添加多个可以直接 append.append.append
string.append("good").append("true")
//输出  hello,worldgoodtrue

 

删除

删除是删除开始索引到结束索引位置的 注意不包含结束索引值

语法:StringBuffer对象.delete(开始索引,结束索引)

string.delete(1,4)
//输出为 ho,worldgoodtrue    

在hello中的o是第四个索引位置 并没有删除这里可以看出删除并不包含结束索引值 这是一个典型的左闭右开原则

替换

替换也是一个典型的左闭右开原则

语法: StringBuffer对象.replace(开始索引,结束索引,替换掉的新值)

string.replace(0,3,"java")
//输出结果  javaworldgoodtrue

插入

插入可以在指定位置索引插入内容,比如说有一个String 内容为abcd 但是我们想变成aocd 是不是很麻烦这时候发现还是StringBuffer类好用

语法:StringBuffer对象.inert(要插入的索引位置,插入的值)

string.inert(0,"hello")
//结果为hellojavaworldgoodtrue

上面我们在索引为0的位置插入了hello但是小伙伴们会发现j是索引为0的位置并没有被替换掉这是因为字符在插入时会自动向后移并不会消失

长度

StringBuffer对象.length()

返回一个StringBuffer对象内字符长度

//string在上面结果为hellojavaworldgoodtrue
string.length()
//打印结果为22

StringBuffer练习题

查看下列代码输出什么?为什么?

String a = null
StringBuffer string = new StringBuffer()
System.out.println(string.length())    

第一个创建了一个String对象 赋值了一个null 肯定是没问题

第二个创建了一个StringBuffer对象也是没问题的,

第三个就需要想一想StringBuffer是否支持空值面对空值StringBuffer是如何去处理的

其实底层调用的是一个AbstractStringBuilder的appendNull()方法 如果为空会赋值 null字符

也就是说输出为4

 欢迎评论一起学习,如果觉得本文章对你有帮助,一键三连支持一下

 

 

 

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

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

相关文章

档案馆库房温湿度监控系统简单介绍

智慧档案馆八防一体化监控系统 智慧档案平台/温湿度/空气质量/漏水/视频/门禁/一体化管控平台 HONSOR多维空间可视化智慧档案库房建设一体化平台分享 三维可视化智慧档案馆库房一体化环境安全管控系统平台 1.系统告警要求: (1)告警方式&am…

[PCIE733]基于PCI Express总线架构的2路160MSPS AD采集、12路LVDS图像数据采集卡

板卡概述 PCIE733是一款基于PCI Express总线架构的,实现2路16-bit、160MSPS ADC采集功能、12路LVDS数据采集板卡。该板卡遵循PCI Express 2.0规范,全高半长尺寸,板卡采用Xilinx的28nm高性能FPGA处理器XC7K325T作为主控制器,板卡AD…

【dfs序+线段树】P3178 [HAOI2015]树上操作

这道题,昨天调到一点多都没调出来,眼睛都要瞎了 今天看着题解边看边调出来了,但是还是感觉不是很会 m d,学的第一道关于树的DS就搞成这样 感觉很寄啊 P3178 [HAOI2015]树上操作 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)…

事务、分布式事务以及seata

事务 事务就是用户定义的一系列数据库操作,这些操作可以视为一个完成的逻辑处理工作单元,要么全部执行,要么全部不执行,是不可分割的工作单元。 事务的四个特效ACID Atomic 原子性,原子性是指事务必须是一个原子的操…

手摸手教你Vite+Vue3项目初始化及开源部署到GItee

项目初始化 本片文章主要记录项目的环境,项目搭建。 在开始本次学习中,鉴于你有前端三件套和vue的知识基础。 文档创建于2023年5月20日,大家都去过情人节了~我在肝代码! 环境的搭建 node版本使用18.16.0。 目前(202…

重磅!超星未来发布全新NOVA-ADCU智能驾驶参考方案

近日,超星未来重磅发布基于惊蛰R1芯片面向多场景打造的全新NOVA-ADCU智能驾驶参考方案,并亮相科技成果展。方案覆盖高阶行泊一体、轻量级行泊一体、双目智驾、路侧感知等场景,携手产业链上下游伙伴构建开放共赢的智能驾驶新生态。 以智能驾驶…

一种新的算法模型,填补微生物组纵向研究数据中的缺失值

谷禾健康 微生物组的纵向研究是一种长期跟踪微生物组变化的研究方法。在这类研究中,样本从同一人群或个人中多次采集,通过检测样本中微生物群落丰度的变化(如不同菌群的比例和种类),来了解微生物组随时间的变化趋势和特…

【LeetCode225.用队列实现栈】你足够了解栈和队列吗?

​ 你好,欢迎来到我的博客!作为一名程序员,我经常刷LeetCode题目来提升自己的编程能力。在我的博客里,我会分享一些我自己做过的题目和解题思路,希望能够帮助到大家。今天,我想和大家分享一道挑战性较高的题…

ApplicationRunner使用

本文来说下CommandLineRunner和ApplicationRunner的使用 文章目录 ApplicationRunner使用示例程序结果 CommandLineRunner使用示例程序结果 ApplicationListener触发时机使用实例程序结果注意问题 ApplicationRunner 使用起来很简单,只需要实现CommandLineRunner或者…

手机也可以搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站【cpolar实现公网访问】

文章目录 1. 安装 Hexo2. 安装cpolar内网穿透3. 公网远程访问4. 固定公网地址 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并…

领英Linkedin开发客户技巧分享

近期领英也是发布公告说2023年8月9号linkedin将关闭领英职场,我看很多有在用领英的小伙伴在问,这里回复一下,国内职场跟咱们做外贸使用linkedin国际版没啥太大关系,大可放心,要说影响的话肯定是有一些的,以…

数据库提权

数据库提权的前提就是得到数据库的账号密码。在webshell或本地进行提权。 数据库提权分为四步: 1.服务探针,探测出数据库的类型(端口扫描等) 2.信息搜集,就是获取到数据库的账号密码。权限要高。 读取数据库密码的…

SUSE系统修改静态IP

Suse系统使用yast管理配置,默认创建虚拟机,是使用DHCP获取动态IP的,这样非常不利于管理。因此,最好使用静态IP。 当前操作系统: eoisu01:~> uname -a Linux su01 6.3.2-1-default #1 SMP PREEMPT_DYNAMIC Mon May …

【服务器数据恢复】断电导致raid6磁盘扇区损坏的数据恢复案例

服务器数据恢复环境: 某品牌存储,12块SAS硬盘组建RAID6磁盘阵列,划分一个卷,分配给几台Vmware ESXI主机做共享存储。 卷中存放了大量的Windows虚拟机,虚拟机通过模板创建的,系统盘大小一致,数据…

苹果营收及增速分析,2022年营收达2055亿美元,增速为7%

众所周知,2007年1月,被乔布斯称为“苹果将彻底改变手机”的第一代iPhone正式发布,并于当年6月底上市销售。上市后,其受欢迎程度令人咋舌,销量一骑绝尘。短短5年内,其市场份额也由最初的3%升至18%&#xff0…

学术科研专用ChatGPT来了!

自从ChatGPT发布之后,各路大神都开始研究如何把它加入到自己的「科研工作流」当中。 比如「数学天才」陶哲轩就表示,他已经将ChatGPT纳入了自己的工作流程。 最近,一位网友也分享了自己的「ChatGPT 学术优化」项目。 没想到,在Gi…

六、数据仓库详细介绍(ETL)工具篇上

0x00 前言 在上篇,我们介绍过,ETL 的实现方式可以分为三种类型:完全依赖数据库、自研、第三方 ETL 工具。 我们需要根据实际情况去选择合适的方案。对于相对简单的 ETL 系统我们可以完全依赖数据库或者内部开发一个小型的的流程控制、调度工…

燕千云助力ITSM知识沉淀与复用

数字化时代IT服务知识沉淀痛点 随着企业数字化进程的推进,企业需要购入更多的智能化、数字化设备及软件,高效生产的同时,问题也层出不穷。而IT服务管理,可以为企业减少密集型的资源消耗,帮助企业以更高效、更流程化的…

28K入职字节的那天,我哭了····

先说一下自己的个人情况,计算机专业,18年本科毕业,一毕业就进入了“阿里”测试岗(进去才知道是接了个阿里外包项目,可是刚毕业谁知道什么外包不外包的)。 更悲催的是:刚入职因为家里出现一些变故,没有精力…

小电源,大讲究

高速先生成员--姜杰 成功的电源设计千篇一律,失败的直流压降各有各的秘密。 对于电源的直流压降,高速先生之前分享过一些低电压、大电流的电源案例,其实,对于种类繁多的小电源,由于电流相对较小,设计过程中…