2019-11-19-String-StringBuffer-StringBuilder区别

String 字符串常量(final 修饰,不可被继承),String是常量,当创建之后不能更改。(可以通过StringBuffer和StringBuilder创建String对象操作)

StringBuffer 字符串变量(线程安全),其也是final类别的,不允许被继承,其中的绝大多数方法都进行了同步处理,包括常用的Append方法也做了同步处理(synchronized 修饰)

其自jdk1.0起就已经出现。其toString方法会进行对象缓存,以减少元素复制开销

public synchronized String toString(){
  if (toStringCache == null){
    toStringCache = Arrays.copyOfRange(value,0,count);    
  }  
   return new String(toStringCache,true) ;
}

StringBuilder 字符串变量(非线程安全)其自jdk1.5起开始出现。与StringBuffer一样都继承和实现了同样的接口和类,方法除了没有使用synchronized修饰以外基本一致,

不同之处在于最后toString的时候,会直接返回一个新对象。

public String toString(){
 //Create a copy , don't share the array

 return new String(value,0,count);
}

 

posted @ 2019-11-19 18:44  小龟一号  阅读(104)  评论(0)    收藏  举报