Java String類和StringBuffer類的區別

視頻課堂:https://edu.csdn.net/course/play/8222

關於java的字符串處理我們一般使用String類和StringBuffer類

那麼String類和StringBuffer類的區別在什麼地方呢?

 

1、String是不可變的、StringBuffer是可變的。在程序中如果定義String s = "this is a string".那麼在以後的應用中不能對s進行任何修改只能進行諸如subString等操作,如果想進行改動只能重新new一個string而不是對原來的s進行改動.而對於StringBuffer卻是可以改變的,在程序中定義StringBuffer s ="This is a",對於StringBuffer可以使用append和insert等函數,如s.append("string")結果就是s="This is a string".

2、String類提供了一些方法,用來進行字符串的比較。這個類實現了Object父類的equals()方法,用來比較兩種字符串的值是否相等。同時還增加了equalsIgnoreCase()方法可以忽略兩個字符串大小寫的區別。但是StringBuffer類並沒有實現Objcet類的Equals方法,所以不能用這個方法來比較兩個StringBuffer類的字符串是否相等。除了用equalse方法來比較兩個字符串外,還可以用==來比較字符串。與equalse方法不同的是,==不是比較兩個字符串的值是否相等,而是比較幾個字符串的引用是否指向同一個實例。

3、StringBuffer的效率並不一定比string高,如對於String s1 ="This "+“is”+"a"+"string"和StringBuffer s2="":s2.append(""This");s2.append("is");s2.append("a");s2.append("string").測試發現前者明顯比後者效率高。原因是,在定義s1時,編譯時即可使得s1="This is a string",而s2需要等到運行時才能確定。

4、當然了,一般情況下,StringBuffer是要比String效率高些的


與包裝類相似,String類是不可以改變的,從而不能修改字符串的值,所以必須創建一個新的字符串來存放,每次都重新開闢了一個內存空間。
如果字符串較少的話我們可以使用String 類,如果文件有幾百成千個字節又會怎麼樣呢.
相反,我們提供另一個類Stingbuffer 來對字符串進行操作。
String類常用方法:
 char charAt(int index);  返回index索引位置的字符
 int length(); 返回字符串的長度。
 String substring(int beginindex,int endindex)返回一個新的字符串,其值是beginindex索引位置到endindex索引位置。
 String trim(); 去除字符串兩邊的空格,並返回一個新的字符串。
 String toLowerCase(); 將字符串中的所以大寫字母轉換成小寫字母,已有大寫字母則不需要轉換,並返回一個新的字符串。
 String toUpperCase();String toLowerCase(); 將字符串中的所以小‘寫字母轉換成小寫字母,已有小寫字母則不需要轉換,並返回一個新的字符串。









 boolean equals(String str);本對象中的字符串與str對象字符串進行比較(區分大小寫) 返回一個boolean值
 String replace(char oldChar, char newChar);將舊的字符串(oldChar)換成新的字符串(newChar)
String類方法:
 主要方法
 append();向字符串末尾添加數據,而不像String類重新開闢空間存放新的內容
 insert();根據方法的重載傳遞不同的參數,在指定的位置對字符串進行插入子字符串。
例:
 String str = "how ";
  str += "are ";
 str +="you";
 如果我們打印str的最終結果是how are you 是我們所期望的,內存裏面的變化:
 how
 how are
 how are you
 String類使用重載加法運算符,在字符串表中創建新的條目,上面一共創建了三條。
 當處理的字符串過多時,上面的做法就很耗費內存。
 
 StringBuffer str = new StringBuffer("how");
 //向str末尾添加字符串
 str.append("are ");
 str.append( "you");
 將需要處理字符串交給StringBuffer類處理 ,
 每個字符串緩衝區都有一定的容量。只要字符串緩衝區所包含的字符序列的長度沒有超出此容量,
 就無需分配新的內部緩衝區數組。如果內部緩衝區溢出,則此容量自動增大。而不是重新聲明新的對象
 這樣的話就不會耗費內存!























 


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