StringBuffer類的使用和詳解底層實現、String和StringBuffer的區別、StringBuffer的常用方法
阿新 • • 發佈:2018-12-02
Java StringBuffer類的使用和詳解底層實現、String和StringBuffer的區別、StringBuffer的常用方法
StringBuffer在工作的時候,使用的頻率非常的高,常常會來拿來接收sql,並進行條件拼接。
1.java StringBuffer類
- java.lang.StringBuffer代表可變的字元序列
- 很多方法與String相同,但StingBuffer是可變長度的。
- StringBuffer是一個容器。
注:重點為①中特性。
2. StringBuffer類的構造器(構造方法)
- StringBuffer()初始容量為16的字串緩衝區
- StringBuffer(int size)構造指定容量的字串緩衝區
- StringBuffer(String str)將內容初始化為指定字串內容
- StringBuffer的底層實現,其能夠實現可變序列的原因就是,在宣告的時候,先給你一個char[]陣列的長度,然後再你新增的時候,如果陣列長度不夠,再增加。
3.String和StringBuffer的區別
String s = new String(“我喜歡學習”);
StringBuffer buffer = new StringBuffer(“我喜歡學習”);
buffer.append(“數學”);
- String能夠new和直接賦值,但StringBuffer類必須使用構造器。
- String類在進行操作的時候,會在字元常量池新增一個新的字元安,如:String str1= “a”; String str2 = str1 + “b”; 新增加一個新的字串"ab",但StringBuffer類不會,使用append()的時候
- String是不可變序列的,在生成的時候,底層char[]陣列長度已經確定,但StringBuffer是可變的。
- 在涉及到操作的時候StringBuffer類的效率高於String
4. StringBuffer類的常用操作方法
- 增(在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)
- 插入(指定位置插入一個str)
StringBuffer insert(int index, String str)
- 查詢
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)
- 刪除(刪除一個左閉右開區別的位置的字串)
StringBuffer delete(int startIndex, int endIndex)
- 反轉(反轉自己本身,不會生成新的物件)
public StringBuffer reverse()
- 擷取(獲取一個左閉右開的字串)
public String substring(int start,int end)
- 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
}