面試題:(重點) StringBuffer和String的區別:
前者是一個可變的字符序列,後者是不可變的字符序列
如果從內存角度考慮,String定義的時候,會在常量池中開闢空間,比較耗費內存
而StringBuffer,字符串緩衝區(裏面存儲的全部都是字符串),它會釋放掉
StringBuffer的構造方法:
StringBuffer() :無參構造的形式,初始容量16
StringBuffer(int capacity) :指定容量構造一個字符串緩衝區StringBuffer(String str) 構造一個字符串緩衝區,並將其內容初始化爲指定的字符串內容
public int length()返回長度
public int capacity()返回當前容量 (如果超過容量,系統自動分配(存儲字符串的時候,英文的))
StringBuffer sb = new StringBuffer("hello java");
System.out.println(sb.length());
public StringBuffer append(String/boolean....) :在字符串緩衝區中追加數據(在末尾追加),並且返回字符串緩衝區本身
public StringBuffer insert(int offset,String str):將當前str字符串添加到指定位置處,它返回字符串緩衝區本身
StringBuffer的刪除功能:
public StringBuffer deleteCharAt(int index):移除指定位置處的字符..
public StringBuffer delete(int start,int end):移除從指定位置處到end-1處的子字符串...
StringBuffer的反轉功能:
public StringBuffer reverse() :將緩衝區中的字符序列反轉取代,返回它(字符串衝)本身
StringBuffer的截取功能:
public String substring(int start):從指定位置開始截取,默認截取到末尾,返回值不在是緩衝區本身,而是一個新的字符串
public String substring(int start,int end) :從指定位置開始到指定位置結束截取,包前不包後,返回值不在是緩衝區本身,而是一個新的字符串
註釋:兩種截取都是取的是截取的部分,而且遵循包前不包後。
StringBuffer的替換功能:
public StringBuffer replace(int start,int end,String str)
從指定位置到指定位置結束,用新的str字符串去替換,返回值是字符串緩衝區本身
String和StringBuffer之間的相互轉換:
public class StringBufferTest {
public static void main(String[] args) {
//String---StringBuffer
String s = "hello";
// StringBuffer sb = s ;不行
// StringBuffer sb = "hello";
// 方式1 :帶參構造,StringBuffer(String str)
StringBuffer sb = new StringBuffer(s) ;
//方式2:可以通過無參構造創建字符串緩衝區對象,給緩衝區中追加內容
StringBuffer sb2 = new StringBuffer() ;
sb2.append(s) ;
System.out.println("sb:"+sb);
System.out.println("sb2:"+sb2);
System.out.println("----------------------------");
//StringBuffer---String
StringBuffer buffer = new StringBuffer("world") ;
//方式1:public String(StringBuffer buffer)分配一個新的字符串,它包含字符串緩衝區參數中當前包含的字符序列
String str = new String(buffer) ;
//方式2:StringBuffer的功能:public String toString()返回此序列中數據的字符串表示形式
String str2 = buffer.toString() ;
System.out.println("str:"+str);
System.out.println("str2:"+str2);
}
}
擴展知識:
StringBuffer:線程安全的,同步的,執行效率低
StringBuilder:線程不安全的,不同步的,執行效率高,並且單線程中優先採用StringBuilder
StringBuffer 執行效率雖然低,但是由於String類型,並且他可變的字符序列,提供了緩衝區
2 StringBuffer和數組的區別:
數組:它是可以存儲多個數據的容器,並且多個數據的類型必須一致
數組長度功能:length屬性
StringBuffer:它是容器,它在緩衝區始終存儲的只能字符串類型的數據
獲取緩衝區的長度:length()