今天无意看到了 BigDecimal 代码里对字符串的处理,发现个有趣的事
static class StringBuilderHelper {
final StringBuilder sb; // Placeholder for BigDecimal string
final char[] cmpCharArray; // character array to place the intCompact
StringBuilderHelper() {
sb = new StringBuilder();
// All non negative longs can be made to fit into 19 character array.
cmpCharArray = new char[19];
}
// Accessors.
//重用StringBuilder,通过重置stringBuilder 里边 count 指针来达到对象复用
StringBuilder getStringBuilder() {
sb.setLength(0);
return sb;
}
...
}
setLength() 相关实现:
public void setLength(int newLength) {
if (newLength < 0)
throw new StringIndexOutOfBoundsException(newLength);
ensureCapacityInternal(newLength);
if (count < newLength) {
Arrays.fill(value, count, newLength, '\0');
}
count = newLength;
}
这里实现了对StringBuilder的重用,只需要重置count指针。很nice的想法,记录下,同时通过Threadlocal+StringBuilder的使用,提高了可用性。