平時很容易搞混這兩個的區(qū)別震肮,長得比較像,總結(jié)一下留拾。
區(qū)別1線程安全:
????????? ? StringBuffer是線程安全的戳晌,StringBuilder是線程是不安全的。因為StringBuffer的所有公開方法都用synchronized 來修飾痴柔,StringBuilder沒有用synchronized 來修飾沦偎。下圖分別用了StringBuffer的append的方法和StringBuilder的append的方法來舉例:
?????? ? StringBuffer的代碼片段:
? ????????????StringBuilder的代碼片段:
區(qū)別2緩沖區(qū):
????????? ? StringBuffer每次toString都會直接使用toStringCache值來構(gòu)造一個字符串,而StringBuilder則每次都需要復(fù)制一次字節(jié)數(shù)組竞帽,再構(gòu)造一個字符串扛施。
區(qū)別3性能:
????????? ? StringBuffer是線程安全的,所有方法都是同步的屹篓,StringBuilder是沒有對方法加鎖同步的疙渣,所以StringBuilder的性能要遠大于StringBuffer
總結(jié):
????????? ? 在使用場景為多線程時使用StringBuffer,如果是單線程則使用StringBuilder堆巧。