首页 > 代码库 > String、StringBuffer、StringBuilder的区别

String、StringBuffer、StringBuilder的区别

  String、StringBuffer、StringBuilder这三个类在字符串处理中都很常用,而且功能上也可以说很相似,那么他们有什么区别呢?

1、首先String是字符串常量,StringBuffer、StringBuilder是字符串变量。为什么说String是字符串常量,用下面的例子说明。

1 String t = "ab";2 t = t + "c";

这个例子在JVM中的过程其实是,创建t对象,然后赋值“ab”,再创建一个新的t对象,来赋值“ab”+“c”,所以原先的t对象并没有改变,所以称String为字符串常量。而StringBuffer和StringBuiler操作时是不会产生新的对象,是直接对原对象进行操作。

 

2、在执行速度上String<(StringBuffer,StringBuiler)。

通过第1点可以看出,String在操作时会不断产生新的对象,所以执行效率上StringBuffer和StringBuiler比String高。

 

3、StringBuffer是线程安全的,StringBuilder不是线程安全的。

在单线程情况下两者的速度是相差无几的,但是在多线程的情况下StringBuffer为保证线程的安全性,在必要时会做一些同步的操作,所以速度上StringBuffer<StringBuilder。

 

总结:

1、在做少量字符串操作时优先使用String,在做大量字符串操作时优先使用StringBuffer或StringBuilder。

2、单线程环境下优先使用StringBuilder,多线程环境下,为了保证线程安全需要牺牲一点速度,优先使用StringBuffer。

 

String、StringBuffer、StringBuilder的区别