StringBuffer与StringBuilder的区别

news/2024/11/7 5:28:52/

 

🏆今日学习目标:

🍀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.ppmy.cn/news/74466.html

相关文章

【机器学习-K近邻算法】绝对通俗易懂的机器学习算法之一

1.k近邻算法 1.1 k近邻算法简介   1.定义:     就是通过你的“邻居”来判断你属于哪个类别。   2.如何计算你到你的“邻居”的距离?     一般时候,都是使用欧氏距离。 1.2 k近邻算法的api初步使用   1.sklearn     优势&a…

xxl-sso 单点登录

目录 1 项目启动修改Host文件运行路径SSO登录/注销流程验证 2 分析登录流程① 首次访问 client1 的 http://xxlssoclient1.com:8081/xxl-sso-web-sample-springboot/ ,进入过滤器② 请求重定向至 server的 http://xxlssoserver.com:8080/xxl-sso-server/login?redi…

代码随想录 哈希表 Java

文章目录 (简单)242.有效的字母异位词(简单)383. 赎金信(中等)49. 字母异位词分组(*中等)438. 找到字符串中所有字母异位词(简单)349. 两个数组的交集&#x…

无效数据处理攻略: 如何从源头开始预防无效数据带来的风险

数据处理在现代社会中变得越来越重要,而对于数据的可靠性和准确性,我们始终非常关注。然而,即使在对数据进行了精心管理的情况下,无效数据依然可能存在,并可能对数据分析和决策带来不良影响。因此,处理无效…

基于Freertos的ESP-IDF开发——5.使用按键[不带消抖、带消抖、长按短按识别]

基于Freertos的ESP-IDF开发——5.使用按键[不带消抖、带消抖、长按短按识别] 0. 前言1. 确定GPIO引脚2. 触发函数(不带消抖)3. 触发函数(带消抖)4. 长按和短按识别5.其他FreeRtos文章 0. 前言 这一节我们来学习使用按键操作。包括带消抖和不带消抖。 由于之前已经学习过FreeR…

HTML+CSS实训——Day01——安装好环境+写一个简单的应用启动页面

前言 学校最近开始实训周了,一上就是一个月,本来想在课上学点考研的东西的,但是无奈任务重,而且最后还能有点小奖励,就认真学了,再者说,html也挺重要的,学一学也不算浪费时间。 软…

【机器学习】 - 作业5: 基于Kmeans算法的AAAI会议论文聚类分析

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…

C++ -- 存储类型说明

存储类型说明 提前说明: 存储持续性 : C使用三种不同的方案来存储诗句(区别:数据保留在内存中的时间) 自动存储持续性:在函数定义中声明的变量(包含函数参数)的存储持续性是自动的…