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对象,并且比第二个变体复制了两倍的字符串数据.