認識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,以及源程式碼進一步了解;