StringBuffer 和 StringBuilder 中的警告
Warning in StringBuffer and StringBuilder
我在 for 循环外初始化了一个 StringBuffer,在 for 循环内我连接了一些字符串。
我收到警告
'StringBuffer stringBuffer' may be declared as 'StringBuilder'
和
string concatenation as argument to 'stringbuilder.append()' call
然后我把那个StringBuffer改成了StringBuilder,因为它比StringBuffer快。现在我收到警告
string concatenation as argument to 'stringbuilder.append()' call
示例代码:
public static String stringConcat(String[] words) {
StringBuffer stringBuffer = new StringBuffer();
for (String word : words) {
stringBuffer.append(word).append(" ");
}
return stringBuffer.toString();
}
为什么我会收到这些警告。
编辑实际代码:
stringBuffer.append(word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase()).append(" ");
使用StringBuilder
代替StringBuffer
public static String stringConcat(String[] words) {
StringBuilder stringBuilder = new StringBuilder();
for (String word : words) {
stringBuilder.append(word).append(" ");
}
return stringBuilder.toString();
}
要点是:您仍然在给 append()
:
的表达式中对字符串使用 + 运算符
... word.substring(0, 1).toUpperCase() + word...
这否定了使用 StringBuilder(或 StringBuffer)的全部意义。
相反:只需调用 append()
两次!使用 buffer/builder 的核心思想是仅使用追加调用来连接您想要的结果;喜欢:
append(word.substring(0, 1).toUpperCase()).append(word...
我在 for 循环外初始化了一个 StringBuffer,在 for 循环内我连接了一些字符串。
我收到警告
'StringBuffer stringBuffer' may be declared as 'StringBuilder'
和
string concatenation as argument to 'stringbuilder.append()' call
然后我把那个StringBuffer改成了StringBuilder,因为它比StringBuffer快。现在我收到警告
string concatenation as argument to 'stringbuilder.append()' call
示例代码:
public static String stringConcat(String[] words) {
StringBuffer stringBuffer = new StringBuffer();
for (String word : words) {
stringBuffer.append(word).append(" ");
}
return stringBuffer.toString();
}
为什么我会收到这些警告。
编辑实际代码:
stringBuffer.append(word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase()).append(" ");
使用StringBuilder
代替StringBuffer
public static String stringConcat(String[] words) {
StringBuilder stringBuilder = new StringBuilder();
for (String word : words) {
stringBuilder.append(word).append(" ");
}
return stringBuilder.toString();
}
要点是:您仍然在给 append()
:
... word.substring(0, 1).toUpperCase() + word...
这否定了使用 StringBuilder(或 StringBuffer)的全部意义。
相反:只需调用 append()
两次!使用 buffer/builder 的核心思想是仅使用追加调用来连接您想要的结果;喜欢:
append(word.substring(0, 1).toUpperCase()).append(word...