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。