Java中String、StringBuffer和StringBuilder的区别

Java中String,StringBuffer,StringBuilder的区别

用一句话简单来说,String是字符串常量,StringBuffer是字符串变量(线程安全),StringBuilder是字符串变量(非线程安全)。

String和StringBuffer性能区别

通过String与StringBuffer对比说明,StringBuilder与StringBuffer类似

String类型和StringBuffer类型的主要性能区别在于String是不可变的对象

所以每次对String类型进行改变的时候其实等等同于生成了一个新的String对象,然后将指针指向新的String对象。所以对于需要经常改变内容的字符串,最好不要使用String,因为每次生成对象都会对系统性能产生影响,特别是当内存中的无引用对象多了之后,JVM的GC就会开始工作,那是会非常耗费时间的。

使用StringBuffer的情况下,每次的操作都是对StringBuffer对象本身进行操作,而不是生成新的对象再改变对象引用。

所以在字符串对象经常改变的情况下,推荐使用StringBuffer,比如说需要对有个字符串对象进行拼接,如果是使用String的“+”来进行拼接的话是很低效率的。

举例

String s = “a” + “b” + “c”;

StringBuffer sb = new StringBuffer();
sb.append(“a”);
sb.append(“b”);
sb.append(“c”);

在这种情况下String的效率是要比StringBuffer高的,因为在这种情况下在JVM眼中这个String s = “a” + “b” + “c”;其实就是String s = “abc”;
生成”abc”当然不需要多少时间了。

而如果需要进行拼接的字符串是来自另外的String对象的话,速度就会很慢了,比如:

String s1 = “a”;
String s2 = “b”;
String s3 = “c”;
String s = s1 + s2 + s3;

这个时候JVM就是按照开始提到的String类型的拼接方式进行了,所以速度就慢了。

StringBuffer和StringBuilder

简单的说,这两个的区别就是在于StringBuffer是线程安全的,而StringBuilder是非线程安全的。

这两者的区别和HashTable、HashMap的区别差不多。
我们知道,HashTable是线程安全的,他有很多方法都是synchronized方法,支持线程同步来保证线程安全会导致性能下降问题,而HashMap是非线程安全的,它在单线程程序中的性能是要比HashTable高的。

这样说了大家就明白Java为什么要在Java5.0中引入StringBuilder这个类了。

所以在单线程下,为了获取最好的性能,推荐使用StringBuilder进行字符串操作,而在多线程在的操作则需要使用StringBuffer来保证线程安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值