La guerre des SBs

Connaissez-vous les différences principales entre les StringBuffers et les StringBuilders ?

Vous savez déjà que c’est une mauvaise pratique de concaténer des String (hors constantes) et qu’il faut passer par un StringBuilder (ou un équivalent). La doc de Java 1.4 donne une très bonne explication. Je vous laisse la relire tranquillement si besoin. Quand JBuilder existait encore, j’avais vu une démo en double thread avec d’une part des algo de concaténation à base de String et d’autre part à base de SB. Au final, pour le même nombre d’itération on avait un taux d’occupation mémoire de l’ordre de 0.5-99.5% (String Vs SB) et bien entendu les algo à base de SB se terminaient bien plus vite.

Mais revenons à la grosse différence entre les 2 SBs. Je traduis la doc : « les instances de StringBuilder ne sont pas safe pour être utilisées par plusieurs threads. Si une telle synchro est nécessaire alors il est recommandé d’utiliser StringBuffer à la place de StringBuilder. » Plus clairement, et en vulgarisant, un StringBuilder, c’est plus rapide car ça ne fait pas de synchro. Or dans la plupart des cas, on n’a pas besoin de synchro. Dans ces cas là, il est donc recommandé de préférer StringBuilder à StringBuffer.

Javadocs :
StringBuffer 6 : http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html
StringBuffer 4 : http://download.oracle.com/javase/1.4.2/docs/api/java/lang/StringBuffer.html (à relire tranquillement)
StringBuilder : http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html

Laisser un commentaire