![]() |
|
||||
|
Você está aqui: Java ::: Pacote java.lang ::: StringBuffer |
||||||
Quais as diferenças entre as classes String e StringBuffer? Quando devo substituir uma pela outra?Quantidade de visualizações: 2845 vezes |
||||||
Tanto a classe String quanto a classe StringBuffer (e seu irmão para código não sincronizado StringBuilder) facilitam nosso trabalho na hora de manipular strings. Mas, há diferenças interessantes entre estas duas classes. Vamos começar pela classe String. Um objeto String é IMUTÁVEL, ou seja, uma vez criado, seu conteúdo não pode ser modificado. Qualquer modificação ocasiona a criação de um novo objeto String. Veja o trecho de código abaixo:
O que ocorre neste código é que o compilador mantém apenas um cópia do texto "Gosto de C e Java" e ambas as variáveis frase e frase2 apontam (referenciam) este texto. Veja agora:
Ao executarmos este código nós teremos o seguinte resultado: Gosto de C e Java GOSTO DE C E JAVA Veja que agora nós efetuamos um chamada ao método toUpperCase() do objeto frase e atribuímos o resultado à variável frase2. E aqui eu destaco bem o conceito de imutabilidade. Em vez de converter o conteúdo da string original para letras maiúsculas, o compilador criou um novo objeto String (guardando a frase em letras maiúsculas) e o atribuiu à variável frase2. Assim, baseado neste experimento, podemos concluir que todas as vezes que modificamos o conteúdo de uma String, o compilador cria um novo objeto String e descarta o anterior. A memória ocupada pelo String anterior será liberado somente após o Garbage Collector detectar os objetos sem referência e proceder com a limpeza. A classe StringBuffer (e também StringBuilder), por sua vez, é MUTÁVEL, ou seja, as modificações que fazemos em objetos desta classe são mantidas no mesmo objeto. Nenhum novo objeto é criado. Veja:
Ao executarmos este código nós teremos o seguinte resultado: Gosto de C e Java e PHP. Gosto de C e Java e PHP. Veja que agora a alteração no conteúdo do StringBuffer foi refletida tanto na variável frase quanto frase2. |
||||||
![]() |
||||||
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
C - Como escrever uma função C personalizada que copia os caracteres de uma string para outra string |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |