String x StringBufer x StringBuilder

Minha Duvida é a seguinte.

Há um ano atras um Professor pediu (como trabalho) para que fizessemos um programa destinado a criptografar uma String usando vetores(Criptografia de Cesar).

(bom… na época eu não fiz).
Há pouco tempo resolvi faze-lo para aprimorar meus conhecimentos e me preparar para algum teste de empresa.
Pensei que o codigo iria ficar muito grande(e chato de se fazer) se eu tivesse que acrescentar todas as letras do alfabeto.
Pensei em usar a tabela ASCII e pedi uma mão a um amigo que me ajudou a concluir o codigo, mas notei um detalhe que não conhecia.
a classe StringBuffer (pois até o momento para mim só exisitia a String para armazenar um conjunto de caracteres):

[code]…
StringBuffer sb = new StringBuffer("");

    for(int i = 0; i < s.length(); i++) {            
                          
        int z = (int)s.charAt(i);
        char c = (char)z;


[/code]
procurei saber sobre o assunto e descobri que tambêm exite a StringBuilder.
Ainda estou estudando sobre o assunto, achei até um link interessante:
http://imasters.uol.com.br/artigo/7131/java/entendendo_as_classes_string_stringbuilder_e_stringbuffer/

Ok eu vi que:
String é imutavel enquanto as outras duas não são.

Pergunta:

Quais são as vantagens de se usar uma ao inves de outra (se der exemplos eu agradeço).

opa! veja se meu artigo ajuda…

link

flw!