String、StringBuuffer、StringBuilder三者的区别
可變性
String 類中使用 ?nal 關(guān)鍵字字符數(shù)組保存字符串, private final char value[] ,所以 String 對象是不可變的。
StringBuilder 與 StringBu?er 都繼承自 AbstractStringBuilder 類,在 AbstractStringBuilder 中也是使用字符數(shù)組保存字符串 char[]value 但是沒有用 ?nal 關(guān)鍵字修飾,所以這兩種對象都是可變的。
StringBuilder 與 StringBu?er 的構(gòu)造方法都是調(diào)用父類構(gòu)造方法也就是 AbstractStringBuilder 實現(xiàn)的
?
String 類
private final char value[];
?
StringBuilder 與 StringBu?er 都繼承自 AbstractStringBuilder 類
?
在 AbstractStringBuilder 中也是使用字符數(shù)組保存字符串 char[]value ,但是沒有用 ?nal 關(guān)鍵字修飾,所以StringBuilder 與 StringBu?er 這兩種對象都是可變的
?
?
線程安全性
String 中的對象是不可變的,也就可以理解為常量,線程安全。AbstractStringBuilder 是 StringBuilder 與 StringBu?er 的公共父類,定義了一些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共 方法。StringBu?er 對方法加了同步鎖或者對調(diào)用的方法加了同步鎖,所以是線程安全的。StringBuilder 并沒有對 方法進(jìn)行加同步鎖,所以是非線程安全的。
性能
每次對 String 類型進(jìn)行改變的時候,都會生成一個新的 String 對象,然后將指針指向新的 String 對象。
StringBu?er 每次都會對 StringBu?er 對象本身進(jìn)行操作,而不是生成新的對象并改變對象引用。相同情況下使用 StirngBuilder 相比使用 StringBu?er 僅能獲得 10%~15% 左右的性能提升,但卻要冒多線程不安全的風(fēng)險。
對于三者使用的總結(jié):
?
StringBu?er加了鎖synchronized
?
總結(jié)
以上是生活随笔為你收集整理的String、StringBuuffer、StringBuilder三者的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLServer之事务简介
- 下一篇: 传奇私服搭建+微端