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。

 

posted @ 2018-04-11 21:08  风雪会  阅读(102)  评论(0)    收藏  举报