🏆今日学习目标:
🍀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
欢迎评论一起学习,如果觉得本文章对你有帮助,一键三连支持一下