1. 运行速度:StringBulider>StringBuffer>String
String:字符串常量
StringBuffer、StringBulider:字符串变量
String为什么运行行慢呢?
创建String对象后,不能再改变;而StringBuffer和StrignBulider创建对象后,还可以改变(每次改变String的值,都要新创建一个对象,再将引用 指向该对象,浪费内存空间,内存中的无用引用多了以后,jvm的GC就开始工作,系统就会慢了)。
2.线程安全:StringBuffer是线程安全的,因为StringBuffer的很多方法中都可以使用Sychronized关键字,可保证线程安全,而StringBulider的方法中没有该关键字,不能保证线程安全。
3.适用场景:String:适用于少量字符串操作情况。
StringBulider:适用于单线程在字符串缓存区进行大量操作。
StringBuffer:适用于多线程在字符串缓存区进行大量操作。
4.举个例子:
String:每次改变String的值,都要新创建一个对象,再将引用指向该对象,浪费内存空间,内存中的无用引用多了以后,jvm的GC就开始工作,系统就会慢了。
StringBuffer:StringBuffer每次都是对对象本身进行操作,而有种特殊情况String要比StringBuffer快:
String s="This"+"is a pen";
StringBuffer sb=new StringBuffer("This").append("is a pen");
创建上面这两个的速度其实都差不多,但是下面这种就能体现出StrignBuffer的优势了
String s1="This";
String s2="is a pen";
String s3=s1+s2;
那么重点来了:具体使用场景,我找到了一个很有用的:https://www.zhihu.com/question/20101840