QUal a diferenca entre String e StringBuffer?

Amigos

Qual a diferenca entre String e StringBuffer? E quando eu uso uma ou outra opção?

Strings são imutáveis, StringBuffers não.

Hoje em dia, um compilador transforma

String x = "a"+"B"

Em algo como

StringBuffer  bf = new StringBuffer("a");
bf.append("B");
String x = bf.toString();

use StringBuffer em casos como o seguinte:

StringBuffer st = new StringBuffer("uma coisa... ");
        for ( int i = 0; i < 10000; i ++ ) {
            st.append(" ; mais coisas ;  ");
        }

em casos onde se realizam muitas concatenações de String use uma StringBuffer e depois :arrow:

String str = st.toString(); onde str é uma variavel de referencia para String (claro) e st é uma variavel de referencia para um objeto StringBuffer.

[]´s