JAVA中String類(lèi)與StringBuffer類(lèi)的區(qū)別
在Java中有兩種字符串的操作:String類(lèi)和StringBuffer類(lèi)(緩沖字符串處理類(lèi))。
下面先簡(jiǎn)單的說(shuō)一下兩者的區(qū)別。
String類(lèi)和StringBuffer類(lèi)都提供了相應(yīng)的方法實(shí)現(xiàn)字符串的操作,但二者略有不同。
(1) String類(lèi)
該類(lèi)一旦產(chǎn)生一個(gè)字符串,其對(duì)象就不可變。String類(lèi)的內(nèi)容和長(zhǎng)度是固定的。如果程序需要獲得字符串的信息需要調(diào)用系統(tǒng)提供的各種字符串操作方法實(shí)現(xiàn)。雖然通過(guò)各種系統(tǒng)方法可以對(duì)字符串施加操作,但這并不改變對(duì)象實(shí)例本身,而是生成一個(gè)新的實(shí)例。系統(tǒng)為String類(lèi)對(duì)象分配內(nèi)存,是按照對(duì)象所包含的實(shí)際字符數(shù)分配的。
(2) StringBuffer類(lèi)
查了查Buffer這個(gè)詞,有緩沖的意思,這個(gè)類(lèi)肯定有緩沖的功能。該類(lèi)處理可變的字符串。如果要修改一個(gè)StringBuffer類(lèi)的字符串,不需要再創(chuàng)建新的字符串對(duì)象,而是直接操作原來(lái)的串。該類(lèi)的各種字符串操作方法與String類(lèi)提供的方法不相同。系統(tǒng)為StringBuffer類(lèi)分配內(nèi)存時(shí),除去當(dāng)前字符所占的空間外,還提供另外的16個(gè)字符大小的緩沖區(qū)。每個(gè)StringBuffer對(duì)象都有一定的緩沖區(qū)容量,當(dāng)字符串大小沒(méi)有超過(guò)容量時(shí),不會(huì)分配新的容量,當(dāng)字符串大小超過(guò)容量時(shí),會(huì)自動(dòng)增加容量。
下面來(lái)舉一些具體的實(shí)例
字符串的連接
String類(lèi)有兩種方法
第一種(“+”)
public class str{
public static void main(String[] args){
String str1="加特效!";
String str2="Duang~~";
System.out.println(str1+" "+str2);
}
}
第二種(”concat”)
public class str{
public static void main(String[] args){
String str1="加特效!";
String str2="Duang~~";
System.out.println(str1.concat(str2));
}
}
StringBuffer類(lèi)的方法
public class str{
public static void main(String[] args){
//構(gòu)建一個(gè)緩沖字符串的對(duì)象sb
StringBuffer sb=new StringBuffer("加特效!");
//通過(guò)append方法,在這個(gè)對(duì)象后面添加一個(gè)新字符串
sb.append(" Duang~~");
System.out.println(sb);
}
}
最終輸出的結(jié)果都為:加特效! Duang~~
通過(guò)上面的例子不難看出,String類(lèi)在進(jìn)行擴(kuò)展的時(shí)候,需要實(shí)例兩個(gè)對(duì)象,每個(gè)對(duì)象都會(huì)占用一定的內(nèi)存,而StringBuffer類(lèi)就不需要再實(shí)例化一個(gè)新的類(lèi),只需要調(diào)用一個(gè)擴(kuò)展的方法就可以了。
還有一點(diǎn)StringBuffer類(lèi)的內(nèi)存容量是可擴(kuò)展的。舉個(gè)具體的例子:
public class str{
public static void main(String[] args){
//聲明字符串對(duì)象sb
StringBuffer sb=new StringBuffer(40);
System.out.println(sb.capacity()); //輸出字符串的容量capacity
sb.ensureCapacity(100); //擴(kuò)充容量
System.out.println(sb.capacity()); //輸出字符串的容量capacity
}
}
capacity()方法代表了字符串對(duì)象在內(nèi)存中,可以容納字符串的個(gè)數(shù)。如果想要擴(kuò)充內(nèi)存容量,可以使用方法ensureCapacity()。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java利用StringBuffer替換特殊字符的方法實(shí)現(xiàn)
- 詳解java中String、StringBuilder、StringBuffer的區(qū)別
- java中stringbuffer線程安全分析實(shí)例詳解
- Java常用類(lèi)庫(kù)StringBuffer,Runtime,日期操作類(lèi)等類(lèi)庫(kù)總結(jié)
- java String、StringBuilder和StringBuffer的區(qū)別詳解
- JAVA面試題 從源碼角度分析StringBuffer和StringBuilder的區(qū)別
- Java中字符數(shù)組、String類(lèi)、StringBuffer三者之間相互轉(zhuǎn)換
- JAVA StringBuffer類(lèi)與StringTokenizer類(lèi)代碼解析
- java之StringBuffer常見(jiàn)使用方法解析
- java 中String和StringBuffer與StringBuilder的區(qū)別及使用方法
- Java String 和StringBuffer的詳解及區(qū)別
- Java中StringBuffer和StringBuilder_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- java中 String和StringBuffer的區(qū)別實(shí)例詳解
- Java基礎(chǔ)之StringBuffer詳解
相關(guān)文章
SpringBoot如何引入緩存提高單次查詢數(shù)據(jù)效率
這篇文章主要介紹了SpringBoot如何引入緩存提高單次查詢數(shù)據(jù)效率問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Java實(shí)現(xiàn)批量操作Excel的示例詳解
在操作Excel的場(chǎng)景中,通常會(huì)有一些針對(duì)Excel的批量操作,以GcExcel為例,為大家詳細(xì)介紹一下Java是如何實(shí)現(xiàn)批量操作Excel的,需要的可以參考一下2023-07-07
淺談MyBatis3 DynamicSql風(fēng)格語(yǔ)法使用指南
這篇文章主要介紹了淺談MyBatis3 DynamicSql風(fēng)格語(yǔ)法使用指南,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
從java反編譯及字節(jié)碼角度探索分析String拼接字符串效率
這篇文章主要介紹了從java反編譯及字節(jié)碼角度探索分析String拼接字符串效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
淺試仿?mapstruct實(shí)現(xiàn)微服務(wù)編排框架詳解
這篇文章主要為大家介紹了淺試仿?mapstruct實(shí)現(xiàn)微服務(wù)編排框架詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
java設(shè)計(jì)模式—靜態(tài)代理模式(聚合與繼承方式對(duì)比)
下面小編就為大家?guī)?lái)一篇java設(shè)計(jì)模式—靜態(tài)代理模式(聚合與繼承方式對(duì)比)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
解決springmvc+mybatis+mysql中文亂碼問(wèn)題
這篇文章主要介紹了解決java中springmvc+mybatis+mysql中文亂碼問(wèn)題的相關(guān)資料,需要的朋友可以參考下2015-09-09

