JAVA6,請使用字串加操作。

來源:互聯網
上載者:User

從JAVA誕生那天起,稍微“有些水平”的程式員都被告知,如果有大量的字串連結,請不要使用字串相加,而應該使用

StringBuffer的append操作然後toString().

到了JAVA5,我們又被告訴知,StringBuilder是StringBuffer的非同步版,所以絕對大多數時候我們“更”可以用StringBuilder

來代替加操作。因為一個可能被多線程訪問的執行個體欄位的StringBuffer操作的情況很少,和在方法中調用字串連結相比1%都不到。

 

但是到了JAVA6,因為編譯器“始終”把字串的+連結編譯成StringBuilder,所以在99%的情況,我們應該使用加操作。

理由是:

1.用加操作比其它操作看起來直觀,寫起來省事,JAVA6之前,即使明知道有效能問題我們還會在一些時候全使用+連結,根本原因當然是

這種寫法直觀,簡單。

 

String str = "Axman" + " is " + "a great lion.";

//請注意,這裡的例子只是為了說明"+"寫法直觀,並不是說只有常量字串相加(常量字串其實直接編譯成一個字串而不是

//append了)JAVA6才最佳化,那是之前的事,對於JAVA6,只要有是字串操作的的+連結(第一個變數或常量是字串),後面不管是常量還是變數,都會進行編譯最佳化

 

StringBuilder sb = new StringBuilder();

sb.append("Axman")

.append(" is ")

.append(" a great lion.");

String str = sb.toString();

 

 

誰要說第二種試方式美觀寫起來爽我一定當面抽他。打到他腦子正常為止。

 

2.我們有時還自覺不自覺地使用StringBuffer,而JAVA6總是把第一種形式最佳化為StringBuilder,在99%的情況下效能更好,除非你需要一個被多線程訪問的執行個體欄位操作。

 

3.特別是,有時我們自己寫StringBuilder時,sb.append(line);後來想在前後加一個"<",">",於是很懶地寫成

sb.append("<"+line+">");這種情況非常多,但這樣情況是先產生一個StringBuilder計算"<"+line+">",然後toString()

StringBuilder所append,還不如全部加操作讓編譯器用一個StringBuilder來append.

 

當然,迴圈中加操作千萬不要這麼做(這種需求除了測試,實際應用可能是萬分之一的機會吧?),編譯器雖然會最佳化編譯,但它是在迴圈內部產生StringBuilder而不是在外部。這種情況一定要自己在外部手工定義StringBuilder而不能依賴編譯器了。但絕對多數情況,也就是99%的情況我們是 str = "axman" + new Object() +1 + "good" +.......這種方式,完全可以信任編譯器來最佳化。

另外只有兩個字串連結時請使用concat.

 

實在忍無可忍,對於一些偽技術人員,如果你覺得你需要反駁我的觀點,請你貼上你的源碼和編譯後的效果來反駁,不要無恥地說兩句放屁的話。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.