StringBuffer和StringBuilder中的警告

Abi*_*h R 16 java stringbuilder android string-concatenation stringbuffer

我有一个StringBuffer在for循环外部和内部for循环初始化我连接一些字符串.

我收到了警告

'StringBuffer stringBuffer'可以声明为'StringBuilder'

字符串连接作为'stringbuilder.append()'调用的参数

然后我将StringBuffer更改为StringBuilder,因为它比StringBuffer快.现在我收到了警告

字符串连接作为'stringbuilder.append()'调用的参数

示例代码:

public static String stringConcat(String[] words) {
    StringBuffer stringBuffer = new StringBuffer();
    for (String word : words) {
        stringBuffer.append(word).append(" ");
    }
    return stringBuffer.toString();
}
Run Code Online (Sandbox Code Playgroud)

为什么我收到这些警告.

编辑实际代码:

stringBuffer.append(word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase()).append(" ");
Run Code Online (Sandbox Code Playgroud)

Gho*_*ica 33

关键是:您仍在使用+运算符表示您给出的表达式中的字符串append():

... word.substring(0, 1).toUpperCase() + word...
Run Code Online (Sandbox Code Playgroud)

这否定了使用StringBuilder(或StringBuffer)的全部意义.

相反:只需拨打append()两次电话!使用缓冲区/构建器的核心思想是仅使用追加调用来连接所需的结果; 喜欢:

append(word.substring(0, 1).toUpperCase()).append(word...
Run Code Online (Sandbox Code Playgroud)

  • 我不认为“这否定了使用 StringBuilder 的全部意义”。有时,附加与 + 放在一起的子字符串更具可读性。人们可能会考虑在 IntelliJ 等中使用警告抑制,例如 //noinspection StringConcatenationInsideStringBufferAppend (3认同)

use*_*187 6

StringBuilder而不是StringBuffer

 public static String stringConcat(String[] words) {
    StringBuilder stringBuilder = new StringBuilder();

    for (String word : words) {
        stringBuilder.append(word).append(" ");
    }
    return stringBuilder.toString();
  }
Run Code Online (Sandbox Code Playgroud)