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

淺談java中String與StringBuffer的不同

 更新時(shí)間:2015年11月13日 10:50:37   投稿:hebedich  
String在棧中,StringBuffer在堆中!所以String是不可變的,數(shù)據(jù)是共享的。StringBuffer都是獨(dú)占的,是可變的(因?yàn)槊看味际莿?chuàng)建新的對(duì)象?。?/div>

String 不是簡(jiǎn)單類(lèi)型,而是一個(gè)類(lèi),它被用來(lái)表示字符序列。字符本身符合 Unicode 標(biāo)準(zhǔn),其初始化方式有兩種。

如:String greeting=“Good Morning! \n”;
String greeting=new String(=“Good Morning! \n”);
String的特點(diǎn)是一旦賦值,便不能更改其指向的字符對(duì)象,如果更改,則會(huì)指向一個(gè)新的字符對(duì)象 。

StringBuffer是一個(gè)具有對(duì)象引用傳遞特點(diǎn)的字符串對(duì)象。

StringBuffer對(duì)象可以調(diào)用其方法動(dòng)態(tài)的進(jìn)行增加、插入、修改和刪除操作,且不用像數(shù)組那樣事先指定大小,從而實(shí)現(xiàn)多次插入字符,一次整體取出的效果,因而操作字符串非常靈活方便。
一旦通過(guò)StringBuffer生成最終想要的字符串,就可調(diào)用它的toString方法將其轉(zhuǎn)換為一個(gè)String對(duì)象

關(guān)于這兩個(gè)類(lèi)在字符串處理中的位置不言而喻,那么他們到底有什么優(yōu)缺點(diǎn),到底什么時(shí)候該用誰(shuí)呢?下面我們從以下幾點(diǎn)說(shuō)明一下

1.二者在執(zhí)行速度方面的比較:StringBuffer  >  String

2.String <StringBuffer的原因
    String:字符串常量
    StringBuffer:字符創(chuàng)變量
    從上面的名字可以看到,String是“字符創(chuàng)常量”,也就是不可改變的對(duì)象。對(duì)于這句話的理解你可能會(huì)產(chǎn)生這樣一個(gè)疑問(wèn)  ,比如這段代碼:

String s = "abcd";  
s = s+1;  
System.out.print(s);// result : abcd1  

我們明明就是改變了String型的變量s的,為什么說(shuō)是沒(méi)有改變呢? 其實(shí)這是一種欺騙,JVM是這樣解析這段代碼的:首先創(chuàng)建對(duì)象s,賦予一個(gè)abcd,然后再創(chuàng)建一個(gè)新的對(duì)象s用來(lái)執(zhí)行第二行代碼,也就是說(shuō)我們之前對(duì)象s并沒(méi)有變化,所以我們說(shuō)String類(lèi)型是不可改變的對(duì)象了,由于這種機(jī)制,每當(dāng)用String操作字符串時(shí),實(shí)際上是在不斷的創(chuàng)建新的對(duì)象,而原來(lái)的對(duì)象就會(huì)變?yōu)槔唬牵没厥盏簦上攵@樣執(zhí)行效率會(huì)有多底。

而StringBuffer就不一樣了,他們是字符串變量,是可改變的對(duì)象,每當(dāng)我們用它們對(duì)字符串做操作時(shí),實(shí)際上是在一個(gè)對(duì)象上操作的,這樣就不會(huì)像String一樣創(chuàng)建一些而外的對(duì)象進(jìn)行操作了,當(dāng)然速度就快了

3.一個(gè)特殊的例子: 

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

String str = “This is only a” + “ simple” + “ test”;   
StringBuffer builder = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);  

你會(huì)很驚訝的發(fā)現(xiàn),生成str對(duì)象的速度簡(jiǎn)直太快了,而這個(gè)時(shí)候StringBuffer居然速度上根本一點(diǎn)都不占優(yōu)勢(shì)。其實(shí)這是JVM的一個(gè)把戲,實(shí)際上:

    String str = “This is only a” + “ simple” + “test”; 


    其實(shí)就是:

String str = “This is only a simple test”; 

    所以不需要太多的時(shí)間了。但大家這里要注意的是,如果你的字符串是來(lái)自另外的String對(duì)象的話,速度就沒(méi)那么快了,譬如:

    String str2 = “This is only a”; 
    String str3 = “ simple”; 
    String str4 = “ test”; 
    String str1 = str2 +str3 + str4; 

    這時(shí)候JVM會(huì)規(guī)規(guī)矩矩的按照原來(lái)的方式去做。

4.StringBuilder與 StringBuffer

    StringBuilder:線程非安全的
    StringBuffer:線程安全的

    當(dāng)我們?cè)谧址彌_區(qū)被多個(gè)線程使用是,JVM不能保證StringBuilder的操作是安全的,雖然他的速度最快,但是可以保證StringBuffer是可以正確操作的。當(dāng)然大多數(shù)情況下就是我們是在單線程下進(jìn)行的操作,所以大多數(shù)情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因。

對(duì)于三者使用的總結(jié):

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

相關(guān)文章

  • SpringBoot中application.yml基本配置解讀

    SpringBoot中application.yml基本配置解讀

    文章主要介紹了Spring Boot項(xiàng)目中`application.properties`和`application.yml`配置文件的使用方法和區(qū)別,包括優(yōu)先級(jí)、配置文件所在目錄、端口服務(wù)配置、數(shù)據(jù)庫(kù)配置、多profile配置以及靜態(tài)資源路徑的指定
    2024-12-12
  • SpringBoot3.x版本與Mybatis-Plus不兼容問(wèn)題

    SpringBoot3.x版本與Mybatis-Plus不兼容問(wèn)題

    當(dāng)使用3.x版本的SpringBoot結(jié)合Mybatis-Plus時(shí)版本不兼容就會(huì)報(bào)錯(cuò),本文就來(lái)介紹一下這個(gè)問(wèn)題的解決方法,感興趣的可以了解一下
    2024-03-03
  • 淺析java貪心算法

    淺析java貪心算法

    這篇文章簡(jiǎn)單主要介紹了java貪心算法,包含貪心算法的基本思路,性質(zhì),以及實(shí)現(xiàn)示例,有需要的小伙伴參考下
    2015-02-02
  • Java利用Zxing生成二維碼的簡(jiǎn)單實(shí)例

    Java利用Zxing生成二維碼的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇Java利用Zxing生成二維碼的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • Jmeter中正則表達(dá)式提取器使用詳解

    Jmeter中正則表達(dá)式提取器使用詳解

    本文主要介紹了Jmeter中正則表達(dá)式提取器使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 10分鐘搞定Java并發(fā)隊(duì)列

    10分鐘搞定Java并發(fā)隊(duì)列

    這篇文章主要介紹了Java并發(fā)隊(duì)列,對(duì)此感興趣的同學(xué),可以參考下
    2021-04-04
  • Java基礎(chǔ)語(yǔ)法之二維數(shù)組詳解

    Java基礎(chǔ)語(yǔ)法之二維數(shù)組詳解

    這篇文章主要介紹了Java基礎(chǔ)語(yǔ)法之二維數(shù)組詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • 使用Java語(yǔ)言將XML轉(zhuǎn)為PDF的方法

    使用Java語(yǔ)言將XML轉(zhuǎn)為PDF的方法

    這篇文章主要介紹了使用Java語(yǔ)言將XML轉(zhuǎn)為PDF的方法,本文將介紹通過(guò)Java代碼來(lái)實(shí)現(xiàn)該格式轉(zhuǎn)換的方法,需要的朋友可以參考下
    2022-03-03
  • MyBatis處理大字段或BLOB、CLOB類(lèi)型數(shù)據(jù)方式

    MyBatis處理大字段或BLOB、CLOB類(lèi)型數(shù)據(jù)方式

    這篇文章主要介紹了MyBatis處理大字段或BLOB、CLOB類(lèi)型數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • SpringBoot3集成Redis的方法詳解

    SpringBoot3集成Redis的方法詳解

    緩存在項(xiàng)目開(kāi)發(fā)中,基本上是必選組件之一,Redis作為一個(gè)key-value存儲(chǔ)系統(tǒng),具備極高的數(shù)據(jù)讀寫(xiě)效率,并且支持的數(shù)據(jù)類(lèi)型比較豐富,下面我們就來(lái)看看SpringBoot3是如何集成Redis的吧
    2023-08-08

最新評(píng)論

曲松县| 沙雅县| 朝阳区| 观塘区| 蓬安县| 霍邱县| 莱芜市| 尼木县| 凤庆县| 辛集市| 乌海市| 收藏| 定安县| 阿克陶县| 土默特右旗| 方山县| 邢台市| 康定县| 鞍山市| 台江县| 安仁县| 靖安县| 克什克腾旗| 虎林市| 阿勒泰市| 张家港市| 扎赉特旗| 邯郸市| 湖北省| 闵行区| 南澳县| 东乌珠穆沁旗| 霍州市| 武城县| 中西区| 阜城县| 灌南县| 井研县| 崇文区| 柯坪县| 绥江县|