認識Java中String與StringBuffer以及StringBuilder

南歸!發表於2021-07-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,以及原始碼進一步瞭解;

 

相關文章