String StringBuffer与StringBuilder
运行速度:
StringBuilder>StringBuffer>String
原因:
String:字符串常量
StringBuffer :字符串变量
StringBuilder:字符串变量(与StringBuffer的区别在后边)
String是不可变的对象,每一次的对于String变化的操作等同于生成一个新的String对象并将变量指针指向这个新的对象。而StringBuileder与StringBuffer每一次的变化操作是对本身的操作。所以效率更高。
特例:
String s1="hello"+"word"; StringBuffer s2=new StringBuffer("hello").append("word");
可以发现:s1的速度远远的快于s2;因为在jvm中用“+”相连接的字符串等同于一个字符串,即s1:
String s1="hello word";
线程安全
StringBuilder是线程不安全的,而StringBuffer是线程安全的
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的;但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
浙公网安备 33010602011771号