java之StringBuider与StringBuffer
StringBuider與StringBuffer類比String更加靈活,只要使用字符串的地方,都可以使用StringBuider與StringBuffer類。三者的共同之處都是 final 類,不允許被繼承,這主要是從性能和安全性上考慮的,因為這幾個類都是經常被使用著的,且考慮到防止其中的參數被修改影響到其它的應用。
二、StringBuider
1)構造方法
StringBuider() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?構建容量為16的空字符串構建器
StringBuider(int capacity) ? ? ? ? ? ? ? ? ? ?構建指定容量的構建器
StringBuider(String s) ? ? ? ? ? ? ? ? ? ? ? ? ?構建指定字符串的構建器
2)普通方法
append(char[] data) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??StringBuider? ? ?//追加字符數組到構造器
append(char[] data, int offset, int len) ? ?StringBuider? ? ?//追加data的之數組到構造器
append(aPrimitveType v) ? ? ? ? ? ? ? ? ? ? ? ?StringBuider? ? ?//將基本類型作為字符串追加到字符串構造器
append(String s) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?StringBuider? ? ?//追加一個字符串到字符串構造器
delete(int startIndex, int endIndex) ? ? ? ? ?StringBuider? ? ?//刪除從startIndex到endIndex-1的字符
deleteCharAt(int index) ? ? ? ? ? ? ? ? ? ? ? ? ? ?StringBuider? ? ? //刪除指定索引位置的字符
insert(int index,char[] data, int offset,int len) ?StringBuider?//指定索引插入數組data的之數組到構造器
insert(int?offset,?char[] data) ? ? ? ? ? ? ? ? ? ??StringBuider ? ? ?//向構造器的偏移位置插入data數組
insert(int offset,?aPrimitveType v) ? ? ? ? ? ?StringBuider ? ? //向構造器的偏移位置插入一個轉換為字符串的數值
replace(int startIndex, int endIndex, String s) ?StringBuider?//從startIndex到endIndex-1的位置的字符替換為指定的字符串
reverse() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?StringBuider ? ? //倒置構建器的字符串
setCharAt(int index, char ch) ? ? ? ? ? ? ? ? ?void ? ? ? ? ? ? ? ? ? ?//將索引的字符更新為新字符
?以上的返回值都是該對象本身的引用。
實例:
?
StringBuilder stringBuilder=new StringBuilder();stringBuilder.append("a");stringBuilder.append('a');stringBuilder.delete(0, 2);stringBuilder.reverse();stringBuilder.insert(stringBuilder.length()-1, "e");?
3)其他方法
charAt(int index) ? ? ?char ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//獲取指定索引的字符
toString() ? ?String
capacity() ? int ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //返回構造器的容量
length() ? ? ? int ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //字符串構建器的實際長度
setLength(int newLength) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//設置構建器的新字符數
substring(int startIndex) ? String ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//返回從startIndex的子字符串
substring(int startIndex, int endIndex) ? String ? ? ? ? ? ? ? ? //返回從startIndex到endIndex的子字符串
trimToSize() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//減少字符串構建器的存儲大小
? ? ? ? setLength(int newLength) ?方法設置字符串的構建長度,如果newLength大于等于當前的長度,則字符串構建器會自動追加足夠的空字符('\u0000'),使其長度length變成newLength,如果newLength小于字符串構建器的長度,則字符串構建器會被截取到恰好等于newLength的個數。newLength必須大于等于0。
? ? ? ?trimToSize()方法的作用是將StringBuffer對象的中存儲空間縮小到和字符串長度一樣的長度,減少空間的浪費。
三、StringBuffer
? ? ? ?StringBuffer線程安全的可變字符序列。一個類似于 String 的字符串緩沖區,但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內容。可將字符串緩沖區安全地用于多個線程。可以在必要時對這些方法進行同步,因此任意特定實例上的所有操作就好像是以串行順序發生的,該順序與所涉及的每個線程進行的方法調用順序一致。
? ? ? ? StringBuffer 與StringBuilder 相似,主要操作有 append 和 insert 方法,可重載這些方法,以接受任意類型的數據。每個方法都能有效地將給定的數據轉換成字符串,然后將該字符串的字符添加或插入到字符串緩沖區中。append 方法始終將這些字符添加到緩沖區的末端,而 insert 方法則在指定的點添加字符。
四、String、StringBuffer 與 StringBuilder
1) String類是final類,String類不能被繼承,并且它的成員方法都默認為final方法。在Java中,被final修飾的類是不允許被繼承的,并且該類中的成員方法都默認為final方法。在早期的JVM實現版本中,被final修飾的方法會被轉為內嵌調用以提升執行效率。而從Java SE5/6開始,就漸漸擯棄這種方式了。因此在現在的Java SE版本中,不需要考慮用final去提升方法調用效率。只有在確定不想讓該方法被覆蓋時,才將方法設置為final。
2) StringBuffer 與 StringBuilder 功能相似,只是 StringBuffer 是線程安全,可以不需要額外的同步用于多線程中。StringBuilder 是非同步,運行于多線程中就需要使用著單獨同步處理,但是速度就比 StringBuffer 快。二者之間的共同點都可以通過append、insert進行字符串的操作。
3) String 實現了三個接口:Serializable、Comparable<String>、CharSequence,而 StringBuffer 及 StringBuilder 只實現了兩個接口Serializable、CharSequence,相比之下 String 的實例可以通過 compareTo 方法進行比較,而其它兩個就不可以。
4) 對字符串進行修改的時候,需要使用StringBuffer和StringBuilder類。
和String類不同的是,StringBuffer和StringBuilder類的對象能夠被多次的修改,并且不產生新的未使用對象。
StringBuilder類在Java 5中被提出,它和StringBuffer之間的最大不同在于StringBuilder的方法不是線程安全的(不能同步訪問)。由于StringBuilder相較于StringBuffer有速度優勢,所以多數情況下建議使用StringBuilder類。然而在應用程序要求線程安全的情況下,則必須使用StringBuffer類。
5) String對于直接相加字符串,效率很高,在編譯器便確定了它的值。對于間接相加(即包含字符串引用),效率要比直接相加低,因為在編譯器不會對引用變量進行優化。
6) String、StringBuilder、StringBuffer三者在修改下的執行效率:
StringBuilder > StringBuffer > String
字符串相加操作或者改動較少的情況下,建議使用 String。字符串相加操作較多的情況下,建議使用StringBuilder,如果采用了多線程,則使用StringBuffer。
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java之StringBuider与StringBuffer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: i7主板配置清单?
- 下一篇: 电脑电源和主板需要怎么匹配?