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

首頁編程開發(fā)java → .net與Java中關于字符串連接處理的對比

.net與Java中關于字符串連接處理的對比

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

作者:西西點擊:1次評論:0次標簽: 字符串

  • 類型:電子教程大。9.5M語言:中文 評分:7.5
  • 標簽:
立即下載

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

一、常量字符串連接

1、.net

例如

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

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

string str="This is  a test.";

例如2、Java

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

編譯后再反射,將得到類似下面的結果。

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

即每次運行時都要重新計算一下。

總結:從這點看.net關于常量字符串的處理要比java快,因為它在編譯時已進行了計算,運行時就是個常量。

二、StringBuilder和StringBuffer

1、.net中只有StringBuilder,沒有StringBuffer,且該類是非線程安全的。以下是msdn中關于StringBuilder在線程安全方面的描述

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

2、JAVA

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

兩者均繼承自AbstractStringBuilder,其內(nèi)部方法均是對其父類相應方法的調(diào)用,可以看作它們均是AbstractStringBuilder的包裝類,只不過一個是線程安全的包裝(StringBuffer),另一個是線程非安全的包裝(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);
    }

下面看一下兩者對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;
    }

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

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

    相關評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

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

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

    沒有數(shù)據(jù)