String/StringBuffer/StringBuilder的执行效率以及区别
1.String、StringBuffer、StringBuilder的異同?
相同點:底層使用char[]進行存儲
不同點:
String:不可變的字符序列
StringBuffer:可變的字符序列:線程安全的(可同步訪問),效率低;
StringBuilder:jdk5.0新增,與StringBuffer一樣是可變的字符序列,但線程不安全的,所以效率較高;
2.String、StringBuffer、StringBuilder三者的效率從高到低排列應該是什么順序?
從高到低:StringBuilder > StringBuffer > String;
3.開發中建議 根據線程安全來選擇使用: StringBuffer(int capacity) / StringBuilder(int capacity);
- 源碼分析String、StringBuffer、StringBuilder底層存儲與預分配內存
tips:
1.System.out.println(sb2.length()); // 3, StringBuffer底層會默認給到16個數組位置,如果你創建了3個,則就代表StringBuffer底層分配給你3+16=19個可以存放數組的位置,但是我初始化只用到3個,那么數組長度就還是3。
比如:一個房間可以占滿100個人,但是只進去了10個人,要問房間現在的容量是多少?那當然是10,而不是100.
2.擴容問題:如果要添加的數據底層數組盛不下了,就需要擴容數組;
默認情況下,擴容為原來容量capacity的2倍+2,同時將原有數組中的元素復制到新的數組中。
eg:
StringBuffer sb = new StringBuffer();System.out.println(sb.length()); //0-
StringBuffer的常用方法/StringBuilder相同
注:涉及到start與end位置的,都是左閉右開[start,end)!!
增: StringBuffer append(xxx);
刪: StringBuffer delete(int start, int end): 刪除指定[start,end)位置的內容;
改:public void setCharAt(int n ,char ch) / StringBuffer replace(int start, int end, String str):把[start, end)位置替換為str;
查:public char charAt(int n);
插: StringBuffer insert(int offset, xxx): 在指定位置插入xxx;
長度:public int length();增刪改查插可不需返回值,即直接調用append() / delete() / setCharAt() / charAt() / insert()方法。
------------------------------------------------------------------------------------------------常用------------------------------------------------------------
StringBuffer reverse() :對當前字符序列進行逆轉操作
public int indexOf(String str):
public String substring(int start, int end):返回[start,end)區間的子字符串,不是切割當前字符串,所以得需要返回值。
== tips: substring()方法是純小寫!!==
- 對比String、StringBuffer、StringBuilder三者的效率
運行結果:
總結
以上是生活随笔為你收集整理的String/StringBuffer/StringBuilder的执行效率以及区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android中控件移动的实现
- 下一篇: 大棚骨架搭建好 科学施肥增收增产