web-dev-qa-db-fra.com

Avertissement dans StringBuffer et StringBuilder

J'ai un StringBuffer initialisé à l'extérieur pour la boucle et à l'intérieur pour la boucle, je concatène certaines chaînes.

Je reçois l'avertissement

'StringBuffer stringBuffer' peut être déclaré comme 'StringBuilder'

et

concaténation de chaînes comme argument de l'appel 'stringbuilder.append ()'

Ensuite, j'ai changé ce StringBuffer en StringBuilder, car il est relativement plus rapide que StringBuffer. Maintenant, je reçois l'avertissement

concaténation de chaînes comme argument de l'appel 'stringbuilder.append ()'

Exemple de code:

public static String stringConcat(String[] words) {
    StringBuffer stringBuffer = new StringBuffer();
    for (String Word : words) {
        stringBuffer.append(Word).append(" ");
    }
    return stringBuffer.toString();
}

Pourquoi je reçois ces avertissements.

Modifier le code réel:

stringBuffer.append(Word.substring(0, 1).toUpperCase() + Word.substring(1).toLowerCase()).append(" ");
17
Abish R

Le fait est que vous utilisez toujours l'opérateur + pour les chaînes de votre expression que vous donnez à append():

... Word.substring(0, 1).toUpperCase() + Word...

Cela annule tout l'intérêt d'utiliser un StringBuilder (ou StringBuffer).

Au lieu de cela: appelez simplement append() deux fois! L'idée de base de l'utilisation d'un tampon/générateur est de concaténer le résultat souhaité en utilisant uniquement des appels d'ajout; comme:

append(Word.substring(0, 1).toUpperCase()).append(Word...

Utilisez StringBuilder au lieu de StringBuffer

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

    for (String Word : words) {
        stringBuilder.append(Word).append(" ");
    }
    return stringBuilder.toString();
  }
6
user2025187