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方法