JAVA中stringbuffer和stringbuilder的区别

string相关知识做个记录。

1)String类是不可变类,一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
public final class String extends Object implements Serializable, Comparable<String>, CharSequence{
}

2)StringBuffer对象则代表一个字符序列可变的字符串,可以通过append()、insert()等方法改变这个字符串对象的字符串序列,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的。

3)JDK1.5新增了一个StringBuilder,与StringBuffer基本类似,构造器和内部方法也基本相同,而StringBuffer是线程安全的,StringBuilder不是线程安全,性能略快。

字符串拼接

String Str = "Hello" + "world";
StringBuffer Sb = new StringBuilder("Hello").append("world");

生成 String Str 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
String Str = “Hello” + “world”;
其实就是:String Str = “Hello world”; 所以当然不需要太多的时间了。

如果是多个String对象拼接,效率就会变低。

String S1 = "Hello";
String S2 = "world";
String S3 = S1 +S2;

首先创建一个String对象S1,并把“Hello”赋值给S1,再创建一个对象S2,把”world”赋值给S2,然后在第三行中,其实JVM又创建了一个新的对象,然后再把原来的S1的值和S2加起来再赋值给新的S3。

总结

  1. String:字符串常量,如果要操作少量的数据用
  2. StringBuffer:字符串变量(线程安全),多线程操作字符串缓冲区 下操作大量数据
  3. StringBuilder:字符串变量(非线程安全),单线程操作字符串缓冲区 下操作大量数据

在大部分情况下 StringBuilder > StringBuffer > String

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值