一.
這個對象以後開發中很常用,Buffer是緩衝區的意思,字符串緩衝區對象。
在java.lang包中,有StringBuffer類。緩衝區就是容器,對數據進行了臨時存儲,StringBuffer做就得就是這個事情。
之前學習的數組也是個容器,它也能存儲東西,區別在哪裏?
數組是固定長度的,StringBuffer是可變長度的。容器知識點要重點掌握,以後數據多了要存儲起來使用。
數組定義完了之後,只能往裏面存儲同一類數據,StringBuffer可以存儲不同類型數據,
append就是添加,不同的append方法很多,這裏只是截圖了一種。它會在緩衝區裏面進行數據追加,byte和short類型的數據不可以添加(沒什麼事兒,short和byte類型,int都可以接收)。
添加方法append返回類型還是StringBuffer,返回的還是本類對象。
在演示添加數據的方法之前,先要建立一個緩衝區。
這個緩衝區一new出來,就能夠存儲16個字符。
緩衝區沒啥,裏面還是數組,只不過它把數組給封裝了。對外提供這麼一個方法,16代表着數組的長度。
想通過sb建立的s1,它們兩者之間有什麼聯繫。DOS結果顯示都爲4。
sb的輸出結果是直接將緩衝區裏面的內容變成了字符串。接着又進行sb==s1?結果顯示爲true。
有一個容器,把4放置在裏面,返回來的依舊是容器。
通過上面截圖中的方式,貌似可以不同建立s1就一樣操作,但是我的疑問是,需要toString方法麼?
這個截圖的結果是4true,打印出來的就是一個字符串。
緩衝區是用來存儲字符串的,存儲結束了要想用其中的數據,最終還要把它變成字符串才能用。緩衝區是用來存儲數據的,存儲完了,就要進行整合,變成一個大的數據,接着變成字符串才能繼續使用。
緩衝區存入數據後,全都集中在一起。而數組中,是分開的。
sb.append(4)運算完了後,返回的是當前緩衝區對象,一個對象調用完方法之後,還是對象。下圖就是方法調用鏈
這些通過append方法追加的數據,都是在尾部形成字符串的,如果想到添加到中間來怎麼辦?
採用insert方法,參數列表中有兩個參數,插入的位置和插入的數據。
結果輸出的是4hahafalse,4的位置是0,。想在哪兒放置就在哪兒放置,這就是緩衝區的特點。
字符串一旦確定就不能修改了,只有通過緩衝區可以進行變化。
DOS結果爲abqqce,2的位置原先是c,現在變爲qq了。
上面說了一些字符緩衝區的特點和裏面所涉及的一些動作。
package stringbuffer.demo;
public class StringBufferDemo {
public static void main(String[] args) {
/*
* StringBuffer:就是字符串緩衝區
* 用於存儲數據的容器。
* 特點
* 1.長度是可變的
* 2.可以存儲不同類型的數據。
* 3.最終要轉成字符串進行使用。
* 4.可以對字符串進行修改
*
* 既然是一個容器,應該具備什麼功能呢?
* 1.添加:
* StringBuffer append(data):
* StringBuffer insert(index,data);
* 2.刪除:
* StringBuffer delete(start,end):包含頭,不包含尾
* StringBuffer deleteCharAt(int index):刪除指定位置的元素。
* 3.查找:
* char charAt(index);
* int indexof(string);
* int lastIndexof(string);
* 4.修改:
* StringBuffer replace(start,end,string);
* void setCharAt(index,char);
* 5.增刪改查 c(create) U(update) R(read) D(dete)
*
*
* StringBuffer();
* 線程安全。
*
*
*
*
*
*
*/
// bufferMethodDemo();
bufferMethodDemo2();
}
public static void bufferMethodDemo2() {
StringBuffer sb = new StringBuffer("abcdefgh");
sb.delete(1, 3);//刪除元素,包含頭,不包含尾
//清空緩衝區
// sb.delete(0, sb.length());
//sb = new StringBuffer//用這種方法清空內存,不合適,浪費內存
System.out.println(sb);//adefgh
sb.deleteCharAt(0);
System.out.println(sb);//defgh
sb.replace(0, 2, "gao");
System.out.println(sb);//gaofgh
sb.setCharAt(0, 'h');
System.out.println(sb);//haofgh
}
public static void bufferMethodDemo() {
//創建緩衝區對象。
StringBuffer sb = new StringBuffer();
// StringBuffer s1 = sb.append(4);
// System.out.println(sb==s1);//true
sb.append(4).append(false).append("haha");
sb.insert(2, "搞");
// sb.append(true);
//緩衝區是存儲數據的。用的話還需要轉成字符串。
System.out.println(sb);
}
}