Java StringBuffer类和 StringBuild类
文章目录
StringBuffer类
介绍:java.lang.StringBuffer 代表 可变的字符序列,可以对字符串内容进行删减,此时不会参数新的对象。
StringBuffer继承于AbstractStringBuilder,可以看见value没有final声明, value可以不断扩容。
StringBuffer类的构造器
StringBuffer 类不同于 String ,其对象必须使用构造器生成。有三个构造器:
- StringBuffer():初始 容量为 16 的字符串缓冲区
为什么说容量为16呢?看下源码:
- StringBuffer(int size )):构造 指定容量的字符串缓冲区
- StringBuffer(String str )):将 内容初始化为指定字符串内容
这里我们来使用一下这三个构造器:
package com.StringBuffer;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = new StringBuffer(10);
StringBuffer s3 = new StringBuffer("我爱喜欢写博客");
s1.append("a");
s1.append(1);
s1.append(false);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
结果如下:
StringBuffer类的常用方法
- StringBuffer append ( xxx):提供了很多的 append() 方法 用于进行字符串拼接
实例代码
package com.StringBuffer;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("武汉");
s1.append("加油");
System.out.println(s1);
}
}
结果:
- StringBuffer delete (int start,int end):删除指定位置的内容
实例代码
package com.StringBuffer;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("afasf1411");
s1.delete(0,5);
System.out.println(s1);
}
}
结果为:
- StringBuffer replace (int start, int end, String str):把 [start,end) 位置替换为 str
实例代码
package com.StringBuffer;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("afasf1411");
s1.replace(0,5,"123");
System.out.println(s1);
}
}
- StringBuffer insert (int offset, xxx):在指定位置插入 xxx
实例代码
package com.StringBuffer;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("Iyou");
s1.insert(1,"love");
System.out.println(s1);
}
}
结果为:
- StringBuffer reverse ():把当前字符序列逆转
实例代码:
package com.StringBuffer;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("Iloveyou");
s1.reverse();
System.out.println(s1);
}
}
结果为:
另外一些:
- indexof()
- substring()
- length()
- chatAt()
这里和Sting类里的方法类似,我就不再说明了。
可参考:https://blog.csdn.net/weixin_45640609/article/details/104694816
StringBuilder类
StringBuilder 和 StringBu ffer 非常类似,均代表可变的字符序列 而且提供相关功能的方法 也 一样
它的源代码:
StringBuilder继承于AbstractStringBuilder,可以看见value没有final声明, value可以不断扩容。
StringBuilder的构造器
和 StringBuffer类似
StringBuilder的常用方法
与StringBuffer类似,就不再累述了
String、StringBuffer、StringBuild效率比较
String:不可变的字符序列;
StringBuffer:可变的字符序列;线程安全的,效率低(相比StringBuffer);
StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;
三者的效率测试
代码如下`在这里插入代码片
package com.StringBuffer;
public class Test {
public static void main(String[] args) {
long StartTime = 0l;
long EndTime = 0L;
String text ="";
StringBuffer buffer = new StringBuffer("");
StringBuilder builder = new StringBuilder("");
StartTime = System.currentTimeMillis();
for (int i=0;i<200000;i++){
buffer.append(i);
}
EndTime = System.currentTimeMillis();
System.out.println("StringBuffer执行的时间为"+(EndTime-StartTime));
StartTime = System.currentTimeMillis();
for (int i=0;i<200000;i++){
builder.append(i);
}
EndTime = System.currentTimeMillis();
System.out.println("StringBuilder执行的时间为"+(EndTime-StartTime));
StartTime = System.currentTimeMillis();
for (int i=0;i<200000;i++){
text += i;
}
EndTime = System.currentTimeMillis();
System.out.println("String执行的时间为"+(EndTime-StartTime));
}
}
结果,还是很明显的:
喜欢就点个赞吧!!!