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

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

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

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

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

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

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

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

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

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

以下是代碼與演示說明:

復(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()+”類型使用的時間為:”+(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()+”類型使用的時間為:”+(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()+”類型使用的時間為:”+(over-begin)+”毫秒”);
}

/*對 String 直接進(jìn)行字符串拼接的測試*/
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(“操作字符串對象引用相加類型使用的時間為:”+(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(“操作字符串相加使用的時間為:”+(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下都運行了這段代碼,各自打印出的時間有些不同,運行結(jié)果如下:
1)myeclipse下循環(huán)10000次時:

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

3)在DOS下運行時:

相關(guān)文章

  • Java哈希表和有序表實例代碼講解

    Java哈希表和有序表實例代碼講解

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

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

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

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

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

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

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

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

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

    IntelliJ IDEA 部署 Web 項目,看這一篇夠了!

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

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

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

    Spring?Boot面試必問之啟動流程知識點詳解

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

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

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

    解決springboot項目啟動失敗Could not initialize class&

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

最新評論

方山县| 安义县| 平罗县| 隆尧县| 嘉祥县| 丹江口市| 遵化市| 滕州市| 东源县| 清新县| 张家界市| 册亨县| 鄂温| 板桥市| 从江县| 宝鸡市| 宜州市| 普陀区| 安丘市| 绍兴市| 读书| 新乡市| 杨浦区| 壶关县| 且末县| 沁源县| 韩城市| 大英县| 崇义县| 循化| 晋江市| 江山市| 卓尼县| 合川市| 吉林省| 凌源市| 遂宁市| 土默特左旗| 罗平县| 牡丹江市| 万安县|