Différence entre StringBuilder et StringBuffer
StringBuffer et StringBuilder sont deux classes importantes en Java qui représentent une chaîne de caractéres mutable. Puisque on peut pas modifier un objet String en Java, toute modification ou opération sur un objet String, par ex. le convertir en majuscule ou en minuscule, ajouter un caractère, supprimer un caractère entraîne un nouvel objet String. Cela peut étre lourd pour le Garbage Collector si votre application génère beaucoup d’instances de chaînes de caractéres, afin d’éviter ce problème, le concepteur Java a présenté initialement la classe StringBuffer, puis la version ultérieure de StringBuilder. Lorsque StringBuffer a été introduit, il pose son propre problème, par exemple. il était synchronisé et était donc beaucoup plus lent.
Table de comparaison
StringBuffer | StringBuilder | |
---|---|---|
Synchronisation | StringBuffer est synchronisé, c’est-à-dire thread-safe. Cela signifie que deux threads ne peuvent pas appeler les méthodes de StringBuffer simultanément. | StringBuilder n’est pas synchronisé, c’est-à-dire qu’il n’est pas thread-safe. Cela signifie que deux threads peuvent appeler les méthodes de StringBuilder simultanément. |
Efficacité | StringBuffer est moins efficace que StringBuilder. | StringBuilder est plus efficace que StringBuffer. |
La différence clé entre StringBuilder et StringBuffer
StringBuilder est plus rapide que StringBuffer car il n’est pas synchronisé.
Exemple :
public class TestTimeExecution { public static void main(String[] args) { long time; //Calculer le temps d’exécution de stringbuffer { StringBuffer stringbuffer = new StringBuffer(); time = System.currentTimeMillis(); for (int j = 999999999; j-- > 0 ; ) { stringbuffer.append(""); } System.out.println("StringBuffer = "+(System.currentTimeMillis() - time)+" ms"); } //Calculer le temps d’exécution de stringbuilder { StringBuilder stringbuilder = new StringBuilder(); time = System.currentTimeMillis(); for (int j = 999999999; j > 0 ; j--) { stringbuilder.append(""); } System.out.println("StringBuilder = "+(System.currentTimeMillis() - time)+" ms"); } } }
La sortie :
Conclusion:
- Les objets de String ne sont pas modifiables et les objets de StringBuffer et StringBuilder sont modifiables.
- StringBuffer et StringBuilder sont similaires, mais StringBuilder est plus rapide et préférable par rapport à StringBuffer pour les programmes à un seul thread. Si la sécurité des threads est nécessaire, utilisez StringBuffer.