Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
+55 (062) 98553-6711
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO
+55 (062) 98243-1195

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser. Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book Apenas R$ 19,90
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)
 
Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br
----------------------------------------------------------------------
 
package estudos;
 
public class Estudos{
  public static void main(String[] args) {
    // criamos um objeto da classe String e usamos a variável frase para
    // referenciá-lo
    String frase = "Gosto de C e Java";
 
    // agora a variável frase2 é uma referência ao objeto String criado anteriormente
    String frase2 = frase;
     
    System.exit(0); 
  }
}

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)
 
Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br
----------------------------------------------------------------------
 
package estudos;
 
public class Estudos{
  public static void main(String[] args) {
    // criamos um objeto da classe String e usamos a variável frase para
    // referenciá-lo
    String frase = "Gosto de C e Java";
 
    // agora a variável frase2 aponta para um novo objeto String
    String frase2 = frase.toUpperCase();
     
    // vamos exibir o conteúdo da variável frase
    System.out.println(frase);
     
    // vamos exibir o conteúdo da variável frase2
    System.out.println(frase2);
     
    System.exit(0); 
  }
}

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)
 
Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br
----------------------------------------------------------------------
 
package estudos;
 
public class Estudos{
  public static void main(String[] args) {
    // criamos um objeto da classe StringBuffer e usamos a variável frase para
    // referenciá-lo
    StringBuffer frase = new StringBuffer("Gosto de C e Java");
 
    // agora a variável frase2 aponta para uma alteração no objeto StringBuffer anterior
    StringBuffer frase2 = frase.append(" e PHP.");
     
    // vamos exibir o conteúdo da variável frase
    System.out.println(frase);
     
    // vamos exibir o conteúdo da variável frase2
    System.out.println(frase2);
     
    System.exit(0); 
  }
}

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.

Link para compartilhar na Internet ou com seus amigos:

Desafios, Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

E-Books em PDF

E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 35 usuários muito felizes estudando em nosso site.