Java StringBuffer類和 StringBuild類
文章目錄
StringBuffer類
介紹:java.lang.StringBuffer 代表 可變的字符序列,可以對字符串內容進行刪減,此時不會參數新的對象。
StringBuffer繼承於AbstractStringBuilder,可以看見value沒有final聲明, value可以不斷擴容。
StringBuffer類的構造器
StringBuffer 類不同於 String ,其對象必須使用構造器生成。有三個構造器:
- StringBuffer():初始 容量爲 16 的字符串緩衝區
爲什麼說容量爲16呢?看下源碼:
- StringBuffer(int size )):構造 指定容量的字符串緩衝區
- StringBuffer(String str )):將 內容初始化爲指定字符串內容
這裏我們來使用一下這三個構造器:
package com.StringBuffer;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = new StringBuffer(10);
StringBuffer s3 = new StringBuffer("我愛喜歡寫博客");
s1.append("a");
s1.append(1);
s1.append(false);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
結果如下:
StringBuffer類的常用方法
- StringBuffer append ( xxx):提供了很多的 append() 方法 用於進行字符串拼接
實例代碼
package com.StringBuffer;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("武漢");
s1.append("加油");
System.out.println(s1);
}
}
結果:
- StringBuffer delete (int start,int end):刪除指定位置的內容
實例代碼
package com.StringBuffer;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("afasf1411");
s1.delete(0,5);
System.out.println(s1);
}
}
結果爲:
- StringBuffer replace (int start, int end, String str):把 [start,end) 位置替換爲 str
實例代碼
package com.StringBuffer;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("afasf1411");
s1.replace(0,5,"123");
System.out.println(s1);
}
}
- StringBuffer insert (int offset, xxx):在指定位置插入 xxx
實例代碼
package com.StringBuffer;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("Iyou");
s1.insert(1,"love");
System.out.println(s1);
}
}
結果爲:
- StringBuffer reverse ():把當前字符序列逆轉
實例代碼:
package com.StringBuffer;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("Iloveyou");
s1.reverse();
System.out.println(s1);
}
}
結果爲:
另外一些:
- indexof()
- substring()
- length()
- chatAt()
這裏和Sting類裏的方法類似,我就不再說明了。
可參考:https://blog.csdn.net/weixin_45640609/article/details/104694816
StringBuilder類
StringBuilder 和 StringBu ffer 非常類似,均代表可變的字符序列 而且提供相關功能的方法 也 一樣
它的源代碼:
StringBuilder繼承於AbstractStringBuilder,可以看見value沒有final聲明, value可以不斷擴容。
StringBuilder的構造器
和 StringBuffer類似
StringBuilder的常用方法
與StringBuffer類似,就不再累述了
String、StringBuffer、StringBuild效率比較
String:不可變的字符序列;
StringBuffer:可變的字符序列;線程安全的,效率低(相比StringBuffer);
StringBuilder:可變的字符序列;jdk5.0新增的,線程不安全的,效率高;
三者的效率測試
代碼如下`在這裏插入代碼片
package com.StringBuffer;
public class Test {
public static void main(String[] args) {
long StartTime = 0l;
long EndTime = 0L;
String text ="";
StringBuffer buffer = new StringBuffer("");
StringBuilder builder = new StringBuilder("");
StartTime = System.currentTimeMillis();
for (int i=0;i<200000;i++){
buffer.append(i);
}
EndTime = System.currentTimeMillis();
System.out.println("StringBuffer執行的時間爲"+(EndTime-StartTime));
StartTime = System.currentTimeMillis();
for (int i=0;i<200000;i++){
builder.append(i);
}
EndTime = System.currentTimeMillis();
System.out.println("StringBuilder執行的時間爲"+(EndTime-StartTime));
StartTime = System.currentTimeMillis();
for (int i=0;i<200000;i++){
text += i;
}
EndTime = System.currentTimeMillis();
System.out.println("String執行的時間爲"+(EndTime-StartTime));
}
}
結果,還是很明顯的:
喜歡就點個贊吧!!!