我需要使用这种方法,在查看源代码后,我注意到一个我StringBuilder
不熟悉的初始化(我总是使用StringBuilder
, ie的无参数构造函数new StringBuilder()
)。
在方法中:
StringBuilder sb = new StringBuilder(items.size() << 3);
来自 JavaDoc:
java.lang.StringBuilder.StringBuilder(整数容量)
构造一个字符串构建器,其中没有字符,初始容量由容量参数指定。
为什么这里需要移位?
源代码:
/** Creates a backslash escaped string, joining all the items. */
public static String join(List<?> items, char separator) {
StringBuilder sb = new StringBuilder(items.size() << 3);
boolean first=true;
for (Object o : items) {
String item = o.toString();
if (first) {
first = false;
} else {
sb.append(separator);
}
for (int i=0; i<item.length(); i++) {
char ch = item.charAt(i);
if (ch=='\\' || ch == separator) {
sb.append('\\');
}
sb.append(ch);
}
}
return sb.toString();
}