西西軟件下載最安全的下載網(wǎng)站、值得信賴(lài)的軟件下載站!

首頁(yè)編程開(kāi)發(fā)java → .net與Java中關(guān)于字符串連接處理的對(duì)比

.net與Java中關(guān)于字符串連接處理的對(duì)比

前往專(zhuān)題相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2013/4/19 10:50:29字體大。A-A+

作者:西西點(diǎn)擊:1次評(píng)論:0次標(biāo)簽: 字符串

  • 類(lèi)型:電子教程大。9.5M語(yǔ)言:中文 評(píng)分:7.5
  • 標(biāo)簽:
立即下載

最近和一位朋友在利用java做一個(gè)多語(yǔ)工具,他是java出身,而我是.net出身,最近剛開(kāi)始搞java,發(fā)現(xiàn)他在處理字符串連接時(shí)使用的是StringBuffer,而我使用的是StringBuilder(.net中推薦的字符串連接的類(lèi),Java也有這個(gè)類(lèi),所以就用了),偶,“StringBuffer”是什么東東,它與StringBuilder有什么區(qū)別。

一、常量字符串連接

1、.net

例如

string str = "This is " + " a " + "test.";

編譯后,我們使用reflector反編譯一下,可以看到編譯器已經(jīng)給我們計(jì)算出了結(jié)果,避免了每次運(yùn)行都重新計(jì)算,提供了效率。

string str="This is  a test.";

例如2、Java

String str=“This is ”+" a "+"test.".

編譯后再反射,將得到類(lèi)似下面的結(jié)果。

String abc=new StringBuilder("This is ").append(" a ").append("test.").

即每次運(yùn)行時(shí)都要重新計(jì)算一下。

總結(jié):從這點(diǎn)看.net關(guān)于常量字符串的處理要比java快,因?yàn)樗诰幾g時(shí)已進(jìn)行了計(jì)算,運(yùn)行時(shí)就是個(gè)常量。

二、StringBuilder和StringBuffer

1、.net中只有StringBuilder,沒(méi)有StringBuffer,且該類(lèi)是非線(xiàn)程安全的。以下是msdn中關(guān)于StringBuilder在線(xiàn)程安全方面的描述

線(xiàn)程安全
此類(lèi)型的任何公共靜態(tài)(Visual Basic 中的 Shared)成員都是線(xiàn)程安全的,但不保證所有實(shí)例成員都是線(xiàn)程安全的。

2、JAVA

StringBuffer 字符串變量(線(xiàn)程安全) 
StringBuilder 字符串變量(非線(xiàn)程安全)

兩者均繼承自AbstractStringBuilder,其內(nèi)部方法均是對(duì)其父類(lèi)相應(yīng)方法的調(diào)用,可以看作它們均是AbstractStringBuilder的包裝類(lèi),只不過(guò)一個(gè)是線(xiàn)程安全的包裝(StringBuffer),另一個(gè)是線(xiàn)程非安全的包裝(StringBuilder)。 

StringBuffer的定義:

public final class StringBuffer

    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{

    public StringBuffer() {
    super(16);
    }

     public StringBuffer(int capacity) {
    super(capacity);
    }

StringBuilder的定義

public final class StringBuilder

    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{

    public StringBuilder() {
    super(16);
    }

    public StringBuilder(int capacity) {
    super(capacity);
    }

下面看一下兩者對(duì)append(String str)的處理

StringBuffer:

public synchronized StringBuffer append(String str) {

        super.append(str);
        return this;
    }

StringBuilder:

public StringBuilder append(String str) {

        super.append(str);
        return this;
    }

對(duì)比以上兩部分代碼,可以發(fā)現(xiàn)兩者代碼基本一樣,都是對(duì)父類(lèi)相應(yīng)方法的調(diào)用,不同的只是StringBuffer多了一個(gè)關(guān)鍵字synchronized,保證方法調(diào)用的原子性,即線(xiàn)程安全,這是要消耗系統(tǒng)資源的。

總結(jié):多線(xiàn)程環(huán)境建議使用StringBuffer,它是線(xiàn)程安全的;單線(xiàn)程或者是多線(xiàn)程但是不存在多個(gè)線(xiàn)程同時(shí)操縱同一個(gè)StringBuilder實(shí)例的環(huán)境使用StringBuilder。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀(guān)圍觀(guān)
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)
    推薦文章

    沒(méi)有數(shù)據(jù)