[quote=rafaelczy][quote=EAugusto]Significa que não é criado um outro objeto para cada concatenação de valores na String inicial.
Simplesmente o StringBuffer é alterado e quando quiser retornar uma String usa-se o método
toString() do StringBuilder.
Até mais[/quote]
desculpa incomodar cara mas tu poderia exemplificar isso numas linhas decodigo?
valeu[/quote]
Sim Rafael, a classe StringBuffer é mutavél pelo fato de possuir métodos que alterem seu conteúdo, podendo perder referência ao que já existia. Quando você ussa o método append(), que aceita vários tipos incluindo Object, você não cria um novo objeto mas sim utiliza do já existe e altera seu conteúdo. Inclusive, pode simplesmente usar o método delete para “apagar” todo o conteúdo do seu objeto StringBuffer.
Todavia, a classe String é um exemplo de classe imutavél, já que o seu contéudo não pode ser alterado uma vez criado. Você dispõe de vários métodos de manipulação, como o toUpperCase(), no qual faz com que o conteúdo da String passe a ser todo em maíusculo. Se verificar na assinatura do método, verás que retorna uma nova String e não é void. Isso porque, a String que você passar como parametro permanecerá inalterada.
Veja exemplo em código com ambos.
[code]StringBuffer sb = new StringBuffer();
sb.append("Ola ");
System.out.println("Inicio: " + sb.toString());
sb.append(“Mundo”);
System.out.println("Fim: " + sb.toString());[/code]
É exatamente o mesmo objeto e ele está me retornando valores distintos em dado um determinado momento. Resumidamente, eu pude modificar seu conteúdo.
Agora, com String:
[code]String s = “ola mundo”;
s.toUpperCase();
System.out.println("Origem: " + s);
String maiusculo = s.toUpperCase();
System.out.println("Nova String: " + maiusculo);[/code]
Nessa caso ‘s’ será impresso assim como foi declarado, porque String é imutavél, para que eu pudesse ter o seu conteúdo modificado, tive de atribuir o resultado do método toUpperCase() a outra String, conforme demonstrei.
Espero ter ajudado.
Abraços!