1. 程式人生 > >StringBuffer類的使用和詳解底層實現、String和StringBuffer的區別、StringBuffer的常用方法

StringBuffer類的使用和詳解底層實現、String和StringBuffer的區別、StringBuffer的常用方法

Java StringBuffer類的使用和詳解底層實現、String和StringBuffer的區別、StringBuffer的常用方法


StringBuffer在工作的時候,使用的頻率非常的高,常常會來拿來接收sql,並進行條件拼接。

1.java StringBuffer類

  1. java.lang.StringBuffer代表可變的字元序列
    ,可以對字串內容進行增刪。
  2. 很多方法與String相同,但StingBuffer是可變長度的。
  3. StringBuffer是一個容器。
    注:重點為①中特性

2. StringBuffer類的構造器(構造方法)

  1. StringBuffer()初始容量為16的字串緩衝區
  2. StringBuffer(int size)構造指定容量的字串緩衝區
  3. StringBuffer(String str)將內容初始化為指定字串內容
  4. StringBuffer的底層實現,其能夠實現可變序列的原因就是,在宣告的時候,先給你一個char[]陣列的長度,然後再你新增的時候,如果陣列長度不夠,再增加。
    地城

    地城

3.String和StringBuffer的區別

String s = new String(“我喜歡學習”);
StringBuffer buffer = new StringBuffer(“我喜歡學習”);
buffer.append(“數學”);
圖

  1. String能夠new和直接賦值,但StringBuffer類必須使用構造器。
  2. String類在進行操作的時候,會在字元常量池新增一個新的字元安,如:String str1= “a”; String str2 = str1 + “b”; 新增加一個新的字串"ab",但StringBuffer類不會,使用append()的時候
  3. String是不可變序列的,在生成的時候,底層char[]陣列長度已經確定,但StringBuffer是可變的。
  4. 在涉及到操作的時候StringBuffer類的效率高於String

4. StringBuffer類的常用操作方法

  1. 增(在StringBuffer字串後面增加)
StringBuffer append(String s)
StringBuffer append(int n) 
StringBuffer append(Object o) 
StringBuffer append(char n)
StringBuffer append(long n)
StringBuffer append(boolean n)
  1. 插入(指定位置插入一個str)
StringBuffer insert(int index, String str) 
  1. 查詢
public char charAt(int n )//查詢指定位置的char
public int indexOf(String str)//返回首次出現str的位置
public int length()//返回陣列的長度
public void setCharAt(int n ,char ch)//修改n位置的字元為ch
StringBuffer replace( int startIndex ,int endIndex, String str) 
  1. 刪除(刪除一個左閉右開區別的位置的字串)
StringBuffer delete(int startIndex, int endIndex) 
  1. 反轉(反轉自己本身,不會生成新的物件)
public StringBuffer reverse() 
  1. 擷取(獲取一個左閉右開的字串)
public String substring(int start,int end)
  1. demo
@Test
	public void test() {
		StringBuffer sb = new StringBuffer();
		System.out.println(sb.length());//初始容量為零不等於長度為零
		sb.append("adc").append("123");//實現可變序列,不同於String,拋棄原來生成新的
		System.out.println(sb);
//		ArrayList list = new ArrayList<>();//動態陣列的實現底層也一樣
		sb.insert(3, "hello");
		System.out.println(sb);
		
		StringBuffer sb1 = sb.reverse();
		System.out.println(sb1);//321ollehcda
		System.out.println(sb);//321ollehcda
	}