認識Java中String與StringBuffer以及StringBuilder

  • 2021 年 7 月 15 日
  • 筆記

String引用數據類型

String對象一經創建就不會發生變化(在常量池裡),即便是賦予新的值,也不是在原來的基礎上改變,而是創建一個新的字元串對象,將引用指向這個對象,會造成空間的浪費;

String str1=”abc”; 字元串 abc存在於常量池 , str1=”sss”; 給str1賦予新的sss值,意味著在常量池增加了一個字元串sss,對原來的字元串abc並無影響;str1隻是引用,str1由原來指向常量池中abc的地址轉為指向常量池中sss的地址;

String的常用方法

charAt(int index):根據索引返回對應的值;indexOf(String st):找st第一次在字元串中出現的位置;

length():返回字元串的長度;replace( char oldstr, char newstr)//replace( String oldstr, String newstr):將字元串中oldstr用newstr代替;

split():根據某個符號將字元串進行分割;substring(int beginindex,int endindex)//substring(int beginindex):返回一個子串,

trim():返回一個字元串,去掉前導和尾隨空格; concat(String str):將指定的字元串拼接到字元串的末尾;

compareTo(String anotherstring):按字典順序比較兩個字元串;toString():返回的是一個字元串;

endWith(String suffix):測試此字元串是否以指定的後綴結尾。

lastindexOf(String str)返回指定子字元串最後一次出現的字元串中的索引。 

StringBuffer:

StringBuffer創建一個對象,是在同一個實例的基礎上做改變,對字元操作效率高;

執行緒同步,執行緒安全效率低;

StringBuilder:執行緒不安全,並發操作,效率高;

單執行緒的情況使用StringBuilder比較好,多執行緒使用使用StringBuilder 加鎖,也可以直接使用StringBuffer;

相對String,StringBuffer與StringBuilder另外獨有的方法:

append(String str):將字元串加入到序列中;capacity();返回當前的容量;

delete(int start,int end):刪除指定位置的字元串;delete(int index):刪除指定的索引對應的字元;

reverse():導致序列被序列的相反代替;replace(int satr,int end,String str):用字元串代替指定位置的字元串;

insert(int s,String str):將字元串插入指定序列中

兩個等號(==):

基本數據類型:比較內容,引用數據類型:比較地址

String str1=””;與String str2=null;的區別:

String str1=”‘   創建了一個長度為0的字元串,並且為其分配了記憶體空間;

String str2=null  聲明了一個str2對象的引用,但是系統並沒分配記憶體空間;

String st=new String(“abc”);在記憶體中有兩個對象,堆區有一個new String,常量池有一個字元串;

 

 過多關於String  StringBuffer StringBuilder 的知識,看API,以及源程式碼進一步了解;