[Java Performance] 字串拼接注意事項,performance拼接

來源:互聯網
上載者:User

[Java Performance] 字串拼接注意事項,performance拼接

  • 字串拼接(String Concatenation)

    // 編譯器最佳化前String answer = integerPart + "." + mantissa;// 編譯器最佳化後String answer = new StringBuilder(integerPart).append(".").append(mantissa).toString();

    因為編譯器會對字串的拼接操作進行最佳化,所以在同一條語句中使用字串拼接操作對效能並沒有負面影響。正因為編譯器在幕後的最佳化,在任何情境下都使用StringBuilder替代“+”操作符來進行字串拼接是沒有必要的。

    但是,當字串的拼接是由多條語句(或者迴圈)完成的,就有問題了:

    // 編譯器最佳化前String answer = integerPart;answer += ".";answer += mantissa;// 編譯器最佳化後String answer = new StringBuilder(integerPart).toString();answer = new StringBuilder(answer).append(".").toString();answer = new StringBuilder(answer).append(mantissa).toString();

    被編譯器最佳化的代碼中,中間的String對象以及StringBuilder對象實際上都是不需要的。此時,可以考慮將以上的拼接語句合并成一條拼接語句。或者直接顯式地使用StringBuilder對象。

總結
  1. 當字串拼接使用一條陳述式完成時,效能和使用StringBuilder時相當。
  2. 對於使用多條陳述式完成字串拼接時,考慮合并這些語句或者顯式使用StringBuilder。

java 怎提高字串拼接速度

使用StringBuffer,或者StringBuilder..都是可以改變是字串。
 
java字串拼接

不是指向同一個對象的。

假設再有個語句,String e = "test3";因為String是final的,不可修改,所以可以把e看成常量。
當再遇到String d="test"+"3"時,編譯器在這裡做了最佳化,把這條語句最佳化為String d="test3",由於存在一個相同的對象e,所以d也指向了e.
所以d、e是同一個對象。

而編譯器在處理String c=a+b時,認為是兩個變數相加,不會做最佳化。所以c,d不是同一個對象。

如果將a,b定義為
final String a = "test";
final String b="3";
這時String c=a+b就變成了常量相加,所以編譯器會對其進行最佳化,即這時c,d就相等了

ps:推薦樓主一本書《深入java虛擬機器》,對java的底層機制有很好的介紹。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.