StringBuffer太粗糙了,或者说锁的粒度太大了,只是简单粗暴的加在方法上,所以很少人使用。
StringBuilder使用tips
- new StringBuilder的时候,如果拼接的字符串比较简单,可以直接new一个带初始化容量大小的StringBuilder,比如RocketMQ源码会有类似写法
private String buildKey(final String topic, final int queueId) {
StringBuilder sb = new StringBuilder(topic.length() + 5);
sb.append(topic);
sb.append(TOPIC_QUEUEID_SEPARATOR);
sb.append(queueId);
return sb.toString();
}
- StringBuilder也有初始容量大小,是16,append的时候会判断容量够不够,不够的话,会进行数组拷贝
Arrays.copyOf
的操作
RocketMQ commit代码示例: