字符串拼接(String Concatenation)
// 編譯器優(yōu)化前 String answer = integerPart + "." + mantissa; // 編譯器優(yōu)化后 String answer = new StringBuilder(integerPart).append(".").append(mantissa).toString();
因?yàn)榫幾g器會(huì)對(duì)字符串的拼接操作進(jìn)行優(yōu)化,所以在同一條語句中使用字符串拼接操作對(duì)性能并沒有負(fù)面影響。正因?yàn)榫幾g器在幕后的優(yōu)化,在任何場(chǎng)景下都使用StringBuilder替代“+”操作符來進(jìn)行字符串拼接是沒有必要的。
但是,當(dāng)字符串的拼接是由多條語句(或者循環(huán))完成的,就有問題了:
// 編譯器優(yōu)化前 String answer = integerPart; answer += "."; answer += mantissa; // 編譯器優(yōu)化后 String answer = new StringBuilder(integerPart).toString(); answer = new StringBuilder(answer).append(".").toString(); answer = new StringBuilder(answer).append(mantissa).toString();
被編譯器優(yōu)化的代碼中,中間的String對(duì)象以及StringBuilder對(duì)象實(shí)際上都是不需要的。此時(shí),可以考慮將以上的拼接語句合并成一條拼接語句。或者直接顯式地使用StringBuilder對(duì)象。