String、StringBuffer、StringBuilder

String類的特點:

1, java語言中用於描述最常見的字符串數據的對象。

2, 字符串數據都是一個對象

3, 字符串數據一旦初始化就不可以被改變了。雙引號表示的都是字符串常量。

4, 字符串對象都存儲在常量池中。字符串常量池。

String s1=”abcd”;//這時在常量池中創建了一個字符串對象。

String s2=new String(“abcd”);//這是在堆內存創建一個String類的對象。並在常量池創建了

//“abcd對象”

對於字符串對象的比較,應該用equals方法完成。

基本數據用==進行比較相同。對象比較相同都用equals方法。

S1.equals(s2);//true String類覆蓋了Object中的equals方法,比較的是字符串內容是否相同。

String s3=”ab”+”cd”;

S1==s3//true

字符串緩衝區StringBuffer

特點:

1, 緩衝區就是用來緩存數據,意味着它是一個容器。

2, 該容器的長度是可變的

3, 提供了對容器中內容的操作方法(最多無外乎四種:增刪該查)

4, 緩衝區中可以添加多種類型的元素,基本類型和引用類型

5, 無論怎麼樣的改變容器中的數據,最終要使用結果,還是必須要將其轉成字符串,使用toString方法

append():追加:在結尾處添加

StringBuilder含義:

Jdk1.5版本出現了一個新的字符串緩衝區

功能和StringBuffer一模一樣

 

StringBuffer是線程安全的

StringBuilder是線程不安全的。爲了提高效率。因爲不用判斷同步鎖

對於容器,被多線程操作,容器出現安全問題。因爲一個線程負責添加,一個線程負責刪除,因爲線程的隨機性就會出現安全問題

 

加鎖。一個線程在執行容器中的內容時,其他線程不可以執行,所以凡是可以操作容器數據的方法,都需要明確這個鎖。每調用一次操作容器的方法(添加,刪除)都需要判斷這個鎖。

對於多線程而言,安全了,但是效率低

對已單線程而言,不涉及安全,但是效率低。所以,對於線程提供了StringBuilder。不需要同步的緩衝區。

實際開發時,建議使用StringBuilder,只有在多線程時,才用StringBuffer

升級:

1, 簡化書寫

2, 提高效率

3, 提高安全性

 

StringBuffer和數組容器的區別

1,

數組容器固定長度

StringBuffer是可變長度

2,

數組容器一旦初始化就明確了元素的類型

StringBuffer可以存儲任意類型。包括基本和引用

3,

數組存儲完元素可以對元素進行操作(通過角標)

StringBuffer存儲完元素後,都會變成字符,只能用字符串的方法來操作。

 

什麼時候用StringBuffer或者StringBuilder?

數據個數可以是固定的,可是是不固定的,數據類型也可以是固定的,或者不固定的。

只要最終這些數據都需要變成字符串來操作時,就可以使用字符串緩衝區

基本數據類型比較用的是比較運算符

對象的比較用的是compareTo方法

 

發佈了30 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章