Java基礎(chǔ)類庫之StringBuffer類用法詳解
StringBuffer類
String類是在所有開發(fā)項(xiàng)目開發(fā)之中一定會使用的一個(gè)功能類,并且這個(gè)類擁有如下功能
- 每個(gè)字符串的常量都屬于一個(gè)String類匿名對象,并且不能修改;
- String類有兩個(gè)常量池:靜態(tài)常量池、運(yùn)行常量池;
- String類對象實(shí)例化建議直接使用賦值的形式完成,這樣可以直接將對象保存在對象池中方便下次重用;
雖然String類很好用,但是我們發(fā)現(xiàn)它也有弊端,就是內(nèi)容不允許頻繁修改,所以為了解決問題,我們提供了StringBuffer類
StringBuffer 并不像String類那樣擁有兩種實(shí)例化方法,必須要想普通方法一樣調(diào)用方法,這個(gè)時(shí)候可以考慮一下方法
- 構(gòu)造方法:public StringBuffer();
- 數(shù)據(jù)追加:public StringBuffer append(數(shù)據(jù)類型、變量),相當(dāng)于字符串中的“+”操作;
- 構(gòu)造方法:public StringBuffer(String str),相當(dāng)于初始化
范例:觀察String與StringBuffer對比
String類對象引用傳遞
public class JavaAPIDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str ="hello";
change(str);
System.out.println(str);
}
public static void change(String temp) {
temp+="word";
}
}
str內(nèi)的值沒有發(fā)生改變
StringBuffer類對象引用傳遞
public class JavaAPIDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuffer buf =new StringBuffer("Hello ");
change(buf);
System.out.println(buf);
}
public static void change(StringBuffer temp) {
temp.append("World");
}
}

buf內(nèi)的值發(fā)生了改變
由此可見String內(nèi)的值不能改變,StringBuffer內(nèi)的值可以改變,這就是兩這最主要的區(qū)別
實(shí)際上大部分的情況下,很少會出現(xiàn)有字符串內(nèi)容的改變,這種改變指的并不是針對靜態(tài)常量池的改變;
范例:分析一下已有問題
public class JavaAPIDemo {
public static void main(String[] args) {
String strA="www.baidu.com";
String strB="www."+"baidu."+"com";
System.out.println(strA==strB);
}
}

在這個(gè)時(shí)候strB對象里面的內(nèi)容并不是真正改變,或者更嚴(yán)格的將,對于現(xiàn)在的strB當(dāng)程序編譯的時(shí)候就相當(dāng)于下面形式
buf.append(“www.”).append(“baidu.”).append(“com”);
也就是說所有的”+“在我們編譯后都變?yōu)榱薙tringBuffer中的append()方法,并且在程序中String類對象和StringBuffer類對象本來就可以互相轉(zhuǎn)換
- String類對象變?yōu)镾tringBuferr可以依靠StringBuffer類構(gòu)造方法或者使用append()方法
- 所以類的對象都可以通過toString()方法將其變?yōu)镾tring類型
在StringBuffer類里面除了可以支持字符串內(nèi)容修改之外,實(shí)際上也添加了很多String所不具有的方法
public class JavaAPIDemo {
public static void main(String[] args) {
StringBuffer buf=new StringBuffer();
buf.append(".com").insert(0,"www.").insert(4, "baidu");
System.out.println(buf);
}
}

刪除指定范圍的數(shù)據(jù):public StringBuffer delete(int start,int end);
public class JavaAPIDemo {
public static void main(String[] args) {
StringBuffer buf=new StringBuffer();
buf.append("Hello World!").delete(6, 12);
System.out.println(buf);
}
}

-字符串內(nèi)容反轉(zhuǎn):public StringBuffer reverse();
public class JavaAPIDemo {
public static void main(String[] args) {
StringBuffer buf=new StringBuffer();
buf.append("Hello World!");
System.out.println(buf.reverse());
}
}

實(shí)際上與StringBuffer類還有一個(gè)類似的功能類:StringBuilder類,這個(gè)類是在JDK1.5之后提供的,該類中提供的方法與StringBuffer類相同,區(qū)別在于StringBuffer類中的方法屬于線程安全的,全都使用了synchronized關(guān)鍵字進(jìn)行標(biāo)注,而StringBuilder類屬于非線程安全的
面試題:請解釋String、StringBuffer、StringBuilder的主要區(qū)別?
String類是字符串的首選類型,其最大的特點(diǎn)是內(nèi)容不允許修改;
StringBuffer與StringBuilder類的內(nèi)容允許修改;
StringBuffer是在JDK1.0的時(shí)候提供的,屬于線程安全操作,而StringBuilder是在JDK1.5的時(shí)候提供的不是線程安全操作
到此這篇關(guān)于Java基礎(chǔ)類庫之StringBuffer類用法詳解的文章就介紹到這了,更多相關(guān)Java StringBuffer類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java詳細(xì)分析String類與StringBuffer和StringBuilder的使用方法
當(dāng)對字符串進(jìn)行修改的時(shí)候,需要使用 StringBuffer 和 StringBuilder類,和String類不同的是,StringBuffer和 StringBuilder類的對象能夠被多次的修改,并且不產(chǎn)生新的未使用對象2022-04-04
基于Redisson實(shí)現(xiàn)注解式分布式鎖的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何基于Redisson實(shí)現(xiàn)注解式分布式鎖,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以了解一下2023-07-07
Springboot jpa @Column命名大小寫問題及解決
這篇文章主要介紹了Springboot jpa @Column命名大小寫問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
MapReduce實(shí)現(xiàn)TopN效果示例解析
這篇文章主要為大家介紹了MapReduce實(shí)現(xiàn)TopN效果示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
mybatis查詢結(jié)果返回至實(shí)體類的示例代碼
這篇文章主要介紹了mybatis查詢結(jié)果返回至實(shí)體類的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
SpringBoot中關(guān)于static和templates的注意事項(xiàng)以及webjars的配置
今天小編就為大家分享一篇關(guān)于SpringBoot中關(guān)于static和templates的注意事項(xiàng)以及webjars的配置,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
Spring如何根據(jù)條件創(chuàng)建bean,@Conditional注解使用方式
這篇文章主要介紹了Spring如何根據(jù)條件創(chuàng)建bean,@Conditional注解使用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06

