App下載

Java中Sring和StringBuffer、StringBuilder區(qū)別是什么?

猿友 2021-04-08 18:07:02 瀏覽數(shù) (2410)
反饋

很多人都知道 Java 的 String 、Stringbuffer 和 StringBuilder ,那么你知道他們的區(qū)別是什么嗎?

可變性

String 類中通常使用字符數(shù)組去保存字符串,比如:Private、final、char 和 value[ ],所以我們說 string 對(duì)象是不可變的。

Stringbuffer 和 StringBuider 都是繼承于 AbstractStringBuilder 類,在 AbstractStringBuilder 里同樣使用字符數(shù)組去保存字符串,char [ ] value ,這兩個(gè)對(duì)象都是可變的。

性能

對(duì) String 類型改變時(shí),會(huì)生成新的 String 對(duì)象,接著將指針對(duì)準(zhǔn)新的 String 對(duì)象。StringBuffer 都會(huì)對(duì) StringBuffer 對(duì)象的本身進(jìn)行操作,而不是去生成新的對(duì)象再改變對(duì)象的引用。相同情況下用 StringBuilder 相比去用 StringBuffer 只能獲取到 10%~15% 的性能提升,還要冒多線程并不安全的風(fēng)險(xiǎn)。

線程安全性

String 內(nèi)的對(duì)象不可變的,可以理以上就是小編為您帶來的關(guān)于 Linux常用命令大全 的全部?jī)?nèi)容。解為常量,線程安全。AbstractStringBuilder 作為 StringBuilder 和 StringBuffer 的公共父類,定義了相關(guān)字符串的基本操作,比如 expandCapacity、append、insert、indexOf 等公共方法。StringBuffer 對(duì)方法加了同步鎖或者對(duì)調(diào)用的方法加了同步鎖,所以線程是安全的。StringBuilder 并沒有對(duì)方法進(jìn)行加同步鎖,所以是非線程安全的。

三者的總結(jié)

String :要操作少量的數(shù)據(jù)

StringBuilder:?jiǎn)尉€程操作字符串緩沖區(qū) 并操作大量數(shù)據(jù)

StringBuffer:多線程操作字符串緩沖區(qū) 并操作大量數(shù)據(jù)

以上就是小編為您帶來的關(guān)于 Java中Sring和StringBuffer、StringBuilder區(qū)別是什么? 的全部?jī)?nèi)容。


0 人點(diǎn)贊