最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

全面解釋java中StringBuilder、StringBuffer、String類之間的關(guān)系

 更新時(shí)間:2013年01月21日 08:54:01   作者:  
String的值是不可變的,這就導(dǎo)致每次對(duì)String的操作都會(huì)生成新的String對(duì)象,不僅效率低下,而且大量浪費(fèi)有限的內(nèi)存空間,StringBuffer是可變類,和線程安全的字符串操作類,任何對(duì)它指向的字符串的操作都不會(huì)產(chǎn)生新的對(duì)象,StringBuffer和StringBuilder類功能基本相似
1. String 類

  String的值是不可變的,這就導(dǎo)致每次對(duì)String的操作都會(huì)生成新的String對(duì)象,不僅效率低下,而且大量浪費(fèi)有限的內(nèi)存空間。
String a = "a"; //假設(shè)a指向地址0x0001
a = "b";//重新賦值后a指向地址0x0002,但0x0001地址中保存的"a"依舊存在,但已經(jīng)不再是a所指向的,a 已經(jīng)指向了其它地址。
因此String的操作都是改變賦值地址而不是改變值操作。

2. StringBuffer是可變類,和線程安全的字符串操作類,任何對(duì)它指向的字符串的操作都不會(huì)產(chǎn)生新的對(duì)象。 每個(gè)StringBuffer對(duì)象都有一定的緩沖區(qū)容量,當(dāng)字符串大小沒(méi)有超過(guò)容量時(shí),不會(huì)分配新的容量,當(dāng)字符串大小超過(guò)容量時(shí),會(huì)自動(dòng)增加容量。

StringBuffer buf=new StringBuffer(); //分配長(zhǎng)16字節(jié)的字符緩沖區(qū)
StringBuffer buf=new StringBuffer(512); //分配長(zhǎng)512字節(jié)的字符緩沖區(qū)
StringBuffer buf=new StringBuffer("this is a test")//在緩沖區(qū)中存放了字符串,并在后面預(yù)留了16字節(jié)的空緩沖區(qū)。

3.StringBuffer
  StringBuffer和StringBuilder類功能基本相似,主要區(qū)別在于StringBuffer類的方法是多線程、安全的,而StringBuilder不是線程安全的,相比而言,StringBuilder類會(huì)略微快一點(diǎn)。對(duì)于經(jīng)常要改變值的字符串應(yīng)該使用StringBuffer和StringBuilder類。

4.線程安全
StringBuffer 線程安全
StringBuilder 線程不安全

5.速度
一般情況下,速度從快到慢:StringBuilder>StringBuffer>String,這種比較是相對(duì)的,不是絕對(duì)的。

6.總結(jié)
(1).如果要操作少量的數(shù)據(jù)用 = String
(2).單線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuilder
(3).多線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuffer

以下是代碼與演示說(shuō)明:

復(fù)制代碼 代碼如下:

public class TestCharacter {
final static int time = 50000; //循環(huán)次數(shù)

public TestCharacter(){

}
public void test(String s){
long begin = System.currentTimeMillis();
for(int i=0; i<time; i++){
s += “add”;
}
long over = System.currentTimeMillis();
System.out.println(“操作”+s.getClass().getName()+”類型使用的時(shí)間為:”+(over-begin)+”毫秒”);
}
public void test(StringBuffer s){
long begin = System.currentTimeMillis();
for(int i=0; i<time; i++){
s.append(“add”);
}
long over = System.currentTimeMillis();
System.out.println(“操作”+s.getClass().getCanonicalName()+”類型使用的時(shí)間為:”+(over-begin)+”毫秒”);
}
public void test(StringBuilder s){
long begin = System.currentTimeMillis();
for(int i=0; i<time; i++){
s.append(“add”);
}
long over = System.currentTimeMillis();
System.out.println(“操作”+s.getClass().getName()+”類型使用的時(shí)間為:”+(over-begin)+”毫秒”);
}

/*對(duì) String 直接進(jìn)行字符串拼接的測(cè)試*/
public void test2(){
String s2 = “abcd”;
long begin = System.currentTimeMillis();
for(int i=0; i<time; i++){
String s = s2 + s2 +s2;
}
long over = System.currentTimeMillis();
System.out.println(“操作字符串對(duì)象引用相加類型使用的時(shí)間為:”+(over-begin)+”毫秒”);
}
public void test3(){
long begin = System.currentTimeMillis();
for(int i=0; i<time; i++){
String s =”abcd” + “abcd” + “abcd”;
}
long over = System.currentTimeMillis();
System.out.println(“操作字符串相加使用的時(shí)間為:”+(over-begin)+”毫秒”);
}
public static void main(String[] args){
String s1 = “abcd”;
StringBuffer st1 = new StringBuffer(“abcd”);
StringBuilder st2 = new StringBuilder(“abcd”);
TestCharacter tc = new TestCharacter();
tc.test(s1);
tc.test(st1);
tc.test(st2);
tc.test2();
tc.test3();
}
}

我在myeclipse和dos下都運(yùn)行了這段代碼,各自打印出的時(shí)間有些不同,運(yùn)行結(jié)果如下:
1)myeclipse下循環(huán)10000次時(shí):

2)myeclipse下循環(huán)50000次時(shí):

3)在DOS下運(yùn)行時(shí):

相關(guān)文章

  • Java哈希表和有序表實(shí)例代碼講解

    Java哈希表和有序表實(shí)例代碼講解

    這篇文章主要介紹了Java哈希表和有序表,哈希表也稱散列表,是一種以鍵值對(duì)形式存儲(chǔ)記錄的數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)支持根據(jù)鍵的內(nèi)容直接訪問(wèn)在內(nèi)存特定位置的值,并且可以進(jìn)行查找、添加和刪除操作
    2023-04-04
  • 動(dòng)態(tài)更改Spring定時(shí)任務(wù)Cron表達(dá)式的優(yōu)雅方案實(shí)例詳解

    動(dòng)態(tài)更改Spring定時(shí)任務(wù)Cron表達(dá)式的優(yōu)雅方案實(shí)例詳解

    spring定時(shí)器非常強(qiáng)大,但是有時(shí)候我們需要在不需要重啟應(yīng)用就可以動(dòng)態(tài)的改變Cron表達(dá)式的值,下面這篇文章主要給大家介紹了關(guān)于動(dòng)態(tài)更改Spring定時(shí)任務(wù)Cron表達(dá)式的優(yōu)雅方案,需要的朋友可以參考下
    2022-12-12
  • ArrayList及HashMap的擴(kuò)容規(guī)則講解

    ArrayList及HashMap的擴(kuò)容規(guī)則講解

    今天小編就為大家分享一篇關(guān)于ArrayList及HashMap的擴(kuò)容規(guī)則講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • java文件下載設(shè)置中文名稱的實(shí)例(response.addHeader)

    java文件下載設(shè)置中文名稱的實(shí)例(response.addHeader)

    下面小編就為大家分享一篇java文件下載設(shè)置中文名稱的實(shí)例(response.addHeader),具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2017-12-12
  • 關(guān)于Struts2文件上傳與自定義攔截器

    關(guān)于Struts2文件上傳與自定義攔截器

    本篇文章,小編將為大家介紹關(guān)于Struts2文件上傳與自定義攔截器,有需要的朋友可以參考一下
    2013-04-04
  • IntelliJ IDEA 部署 Web 項(xiàng)目,看這一篇夠了!

    IntelliJ IDEA 部署 Web 項(xiàng)目,看這一篇夠了!

    這篇文章主要介紹了IntelliJ IDEA 部署 Web 項(xiàng)目的圖文教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java中使用MongoDB數(shù)據(jù)庫(kù)實(shí)例Demo

    Java中使用MongoDB數(shù)據(jù)庫(kù)實(shí)例Demo

    MongoDB是由C++語(yǔ)言編寫的,基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是最接近于關(guān)系型數(shù)據(jù)庫(kù)的NoSQL數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于Java中使用MongoDB數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • Spring?Boot面試必問(wèn)之啟動(dòng)流程知識(shí)點(diǎn)詳解

    Spring?Boot面試必問(wèn)之啟動(dòng)流程知識(shí)點(diǎn)詳解

    SpringBoot是Spring開(kāi)源組織下的子項(xiàng)目,是Spring組件一站式解決方案,主要是簡(jiǎn)化了使用Spring的難度,簡(jiǎn)省了繁重的配置,提供了各種啟動(dòng)器,開(kāi)發(fā)者能快速上手,這篇文章主要給大家介紹了關(guān)于Spring?Boot面試必問(wèn)之啟動(dòng)流程知識(shí)點(diǎn)的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Java實(shí)現(xiàn)導(dǎo)出pdf格式文件的示例代碼

    Java實(shí)現(xiàn)導(dǎo)出pdf格式文件的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)導(dǎo)出pdf格式文件的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • 解決springboot項(xiàng)目啟動(dòng)失敗Could not initialize class com.fasterxml.jackson.databind.ObjectMapper問(wèn)題

    解決springboot項(xiàng)目啟動(dòng)失敗Could not initialize class&

    這篇文章主要介紹了解決springboot項(xiàng)目啟動(dòng)失敗Could not initialize class com.fasterxml.jackson.databind.ObjectMapper問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評(píng)論

突泉县| 兴海县| 巴东县| 常山县| 德钦县| 萝北县| 扎兰屯市| 章丘市| 扎兰屯市| 自治县| 青州市| 恩平市| 曲麻莱县| 甘泉县| 怀安县| 陇川县| 青海省| 连平县| 交城县| 富锦市| 乐平市| 申扎县| 那坡县| 永胜县| 通州市| 广宗县| 金溪县| 监利县| 开鲁县| 蓬溪县| 盐亭县| 三门县| 婺源县| 静海县| 水富县| 嘉禾县| 龙海市| 兰州市| 恩平市| 华宁县| 平江县|