西西軟件下載最安全的下載網(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,其內部方法均是對其父類相應方法的調用,可以看作它們均是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)兩者代碼基本一樣,都是對父類相應方法的調用,不同的只是StringBuffer多了一個關鍵字synchronized,保證方法調用的原子性,即線程安全,這是要消耗系統(tǒng)資源的。

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

      相關評論

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

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

      熱門評論

      最新評論

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

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

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