String , StringBuffer & StringBuilder

Pessoal do GUJ Boa Noite!

Gostaria de sabe o seguinte…

Em um objeto String , eu sei que este é imutavél pois como se segue abaixo

String hello = "Hello";
hello += "World";

Me corijam se eu falar algo errado! Neste caso um objeto é criado com o valor "Hello"
no pool de constantes String na segunda linha faço uma atribuição “World”, sendo assim
um novo objeto e criado “Hello world” é a referencia hello passa apontar para ele é “Hello” fica perdido na memória,Imagine
se fosse feito isso usando StringBuffer ou StringBuilder, seria mesma coisa?
ou a referencia sempre apontará para um unico objeto?

Atenciosamente.

Então,

quando utilizado algum desses (StringBuilder ou StringBuffer) o Objeto se comporta de maneira diferente.
Esses objetos são mútaveis, diferente dos objetos String.
Quando uma atribuição é feita nenhum objeto é perdido ele apenas é alterado para receber um novo valor.
Existem muitas outras particularidades sobre essas 2 classes mas esse é um dos pontos mais importantes a se ter em mente.

Prefira StringBuilder - StringBuffer é uma implementação antiga que sobrevive pra manter código da época funcionando. Sempre que possível, opte por objetos imutáveis - eles permitem garantir com maior facilidade que os invariantes de uma classe são mantidos, mesmo que o cliente os acesse. Além disso, não haverá problemas de sincronização, já que seu estado é constante.