Objetos String são especiais em java, uma vez criados não é possível alterá-los, você pode alterar a variável de referência mas o objeto vai estar lá, intacto. Strings que não possuem variável de referência apontando para ela são ficam inacessíveis e perdidas para seu programa. O mesmo acontece se vc atribuir reatribuir uma variável de referência para outro objeto String, o objeto anterior também ficará perdido.
Métodos da classe String, assim como em Arrays, usam índices que iniciam em zero. Existe apenas uma unica exceção para esse caso: o segundo parâmetro do método substring().
Não é possível subscrever métodos da classe String, pois esta é final.
Uma coisa muito importante. Strings possuem um método (MÉTODO MESMO) chamado length() (método tem parenteses, nao se esqueça), não confundir com Arrays que possuem um ATRIBUITO chamado length.
StringBuffer e StringBuilder possuem a mesma API, a diferença entre essas classes se resume ao fato de StringBuffer possuir métodos sincronizados para segurança de threads. Isso trás alguns poréns, como: métodos de StringBuilder devem rodar mais rápido. Bom, demais ambas são alteráveis - ou seja, não será necessária a criação de um novo objeto. Essa demorei um pouquinho pra entender, os métodos dessas classes atuam sobre o objeto chamador, ou seja, não preicsa de uma atribuição explícita na instrução. Observem:
StringBuffer sb = new StringBuffer("aprendiz");
sb.append("dojava"); // não reatribuir o objeto
Se eu mandar imprimir sb ele vai exibir aprendizdojava, ou seja, a atribuição é implícita, não preciso atribuir. Entenderam lindinhos? q bom...
O método equals() dessas classes não é subscrito, não compara valores (não entendi!! se eu achar eu aiso vocês).
Vc pode encadear métodos (str.append("s").replace(...)), estes devem ser avaliados da esquerda pra direita.
Métodos para memorizar da classe String:
- charAt - recebe como parametro um inteiro q indica o indice do caracter q será retornado (lembrando q a indexação começa com zero);
- concat - recebe uma string q será concatenada e retorna a concatenação (também uma String);
- equalsIgnoreCase - recebe uma String como parâmetro para comparar com o objeto chamador, este método ignora a caixa das Strings;
- length() - retorna um inteiro, com o número de caracteres da String;
- replace - retorna uma String e recebe dois char's como parametro. O retorno é as ocorrencias do char substituidas pelo segundo argumento.
- substring - recebe dois parametros inteiros (inicio e fim) ou um só (inicio). Retorna o pedaço da String indexado pelos valores início e fim (lembrando que o segundo argumento a indexação inicia em 1 mesmo);
- toLowerCase - retorna o a String do objeto chamador todo em caixa baixa;
- toString - retorna a String do objeto chamador;
- toUpperCase - retorna a String do objeto chamador todo em caixa alta;
- trim - retorna o objeto String chamador tirando todos os espaços presentes
Métodos para memorizar de StirngBuffer e StringBuilder (a diferença é o syncronized):
- append - recebe uma String e retorna a string do objeto chamador concatenado com a do argumento.
- delete - recebe dois inteiros q indicam inicio e fim dos caracteres q serão apagados, retorna o objeto StringBuilder ou Buffer. A indexação começa com 0 no primeiro argumento e 1 no segundo.
- insert - recebe um inteiro que representa o offset e uma String q será inserida a partir do offset passado, retorna a nova StringBuilder ou Buffer como resultado. A indexação inicia no zero.
- reverse - retorna o objeto StringBuilder ou Buffer com a String do objeto chamador invertida.
- toString - retorna a String como um objeto String.