很多人都知道 Java 的 String 、Stringbuffer 和 StringBuilder ,那么你知道他們的區(qū)別是什么嗎?
可變性
String 類中通常使用字符數(shù)組去保存字符串,比如:Private、final、char 和 value[ ],所以我們說 string 對象是不可變的。
Stringbuffer 和 StringBuider 都是繼承于 AbstractStringBuilder 類,在 AbstractStringBuilder 里同樣使用字符數(shù)組去保存字符串,char [ ] value ,這兩個(gè)對象都是可變的。
性能
對 String 類型改變時(shí),會(huì)生成新的 String 對象,接著將指針對準(zhǔn)新的 String 對象。StringBuffer 都會(huì)對 StringBuffer 對象的本身進(jìn)行操作,而不是去生成新的對象再改變對象的引用。相同情況下用 StringBuilder 相比去用 StringBuffer 只能獲取到 10%~15% 的性能提升,還要冒多線程并不安全的風(fēng)險(xiǎn)。
線程安全性
String 內(nèi)的對象不可變的,可以理以上就是小編為您帶來的關(guān)于 Linux常用命令大全 的全部內(nèi)容。解為常量,線程安全。AbstractStringBuilder 作為 StringBuilder 和 StringBuffer 的公共父類,定義了相關(guān)字符串的基本操作,比如 expandCapacity、append、insert、indexOf 等公共方法。StringBuffer 對方法加了同步鎖或者對調(diào)用的方法加了同步鎖,所以線程是安全的。StringBuilder 并沒有對方法進(jìn)行加同步鎖,所以是非線程安全的。
三者的總結(jié)
String :要操作少量的數(shù)據(jù)
StringBuilder:單線程操作字符串緩沖區(qū) 并操作大量數(shù)據(jù)
StringBuffer:多線程操作字符串緩沖區(qū) 并操作大量數(shù)據(jù)
以上就是小編為您帶來的關(guān)于 Java中Sring和StringBuffer、StringBuilder區(qū)別是什么? 的全部內(nèi)容。