string stringbuffer stringbuilder 区别
string stringbuffer stringbuilder 区别
基本概念
String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全)
执行速度
StringBuilder>StringBuffer>String
String类型和StringBuffer类型的主要性能区别在于String是不可变的对象,因此每次对String类型进行改变的时候其实等统一生成了一个新的String对象,然后将指针指向新的String对象,所以经常改变内容的字符串最后不要String,因为每次生成对象都会对系统性能产生影响,内存中无引用多了后,还会进行GC,速度就相当慢了。
StringBuffer结果就不同了,StringBuffer每次都是对对象本身进行操作的,所以一般情况下推荐使用StringBuffer.
某些特殊情况下,String的字符串拼接被JVM解释成了StringBuffer对象的拼接,所以这些时候String对象的速度并不会比StringBuffer慢。
1 | String S1 = “This is only a” + “ simple” + “ test”; |
线程安全性
StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
StringBuffer常用API
1 | public StringBuffer append(char c)// |