StringBuilder附加vs +

Mic*_*ael 13 java string performance

这两条线有什么区别?

stringBuilder.append("Text " + counter + " more text");
stringBuilder.append("Text ").append(counter).append(" more text");
Run Code Online (Sandbox Code Playgroud)

假设计数器的递增INT,并在第一行创建一个字符串"Text 0 more text","Text 1 more text"每个它的名字,而第二行创建只有这两个字符串一次时间等:"Text "" more text"?它是否正确?

NPE*_*NPE 15

概括地说,是的,但对于相同的字符串文字"Text "" more text"得到重用每次.

第二种变体更有效,因为它将三个组件中的每一个直接写入StringBuilder.

相反,第一个变体创建另一个 - 未命名 - StringBuilder,将三个组件写入其中,调用其toString()方法并将结果写入命名stringBuilder.

总之,第一个变体创建了一个额外的StringBuilder对象和一个额外的String对象,并且比第二个变体复制了两倍的字符串数据.