String,StringBuffer與StringBuilder的區別

一、Java String 類——String字符串常量

字符串廣泛應用 在Java 編程中,在 Java 中字符串屬於,Java 提供了 String 類來創建操作字符串

需要注意的是,String的值是不可變的,這就導致每次對String的操作都會生成新的String對象,這樣不僅效率低下,而且大量浪費有限的內存空間。我們來看一下這張對String操作時內存變化的圖:

我們可以看到,初始String值爲“hello”,然後在這個字符串後面加上新的字符串“world”,這個過程是需要重新在棧堆內存中開闢內存空間的,最終得到了“hello world”字符串也相應的需要開闢內存空間,這樣短短的兩個字符串,卻需要開闢三次內存空間,不得不說這是對內存空間的極大浪費。爲了應對經常性的字符串相關的操作,谷歌引入了兩個新的類——StringBuffer類和StringBuild類來對此種變化字符串進行處理。

二、Java StringBuffer 和 StringBuilder 類——StringBuffer字符串變量、StringBuilder字符串變量

對字符串進行修改的時候,需要使用 StringBuffer 和 StringBuilder 類。

和 String 類不同的是,StringBuffer 和 StringBuilder 類的對象能夠被多次的修改,並且不產生新的未使用對象

StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在於 StringBuilder 的方法不是線程安全的(不能同步訪問)。

由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。然而在應用程序要求線程安全的情況下,則必須使用 StringBuffer 類。

三者的繼承結構

三者的區別

(1)字符修改上的區別(主要,見上面分析)

(2)初始化上的區別,String可以空賦值,後者不行,報錯

①String

String s = null;   

String s = “abc”;   

②StringBuffer

StringBuffer s = null; //結果警告:Null pointer access: The variable result can only be null at this location

StringBuffer s = new StringBuffer();//StringBuffer對象是一個空的對象

StringBuffer s = new StringBuffer(“abc”);//創建帶有內容的StringBuffer對象,對象的內容就是字符串”

小結:(1)如果要操作少量的數據用 String;

(2)多線程操作字符串緩衝區下操作大量數據 StringBuffer;

(3)單線程操作字符串緩衝區下操作大量數據 StringBuilder

轉載自https://blog.csdn.net/weixin_41101173/article/details/79677982,感謝整理和分享!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章