Classes

Strings

Classe imutável utilizada para representar sequências de caracteres, oferecendo diversas formas de construção.

Introdução

Na linguagem Java, existem três abordagens principais para trabalhar com cadeias de caracteres: String, StringBuilder e StringBuffer.
Essas classes oferecem diferentes características em termos de mutabilidade, desempenho e segurança em ambientes concorrentes.

A classe java.lang.String representa uma sequência de caracteres imutável e é fundamental na linguagem Java.
Ela pertence ao pacote java.lang e fornece múltiplas formas de criação de objetos, permitindo construir strings a partir de literais, arrays de caracteres, arrays de bytes e outros objetos.

Java Doc

String

Classe imutável que representa cadeias de caracteres em Java.
containsendsWithequalsequalsIgnoreCaseisBlankisEmptyjoinlengthmatchesrepeatreplacereplaceAllreplaceFirstsplitstartsWithsubstringtoLowerCasetoUpperCasetrim

java.lang

StringBuilder

Classe mutável para manipulação de strings. Não é sincronizada e oferece melhor performance que StringBuffer.
appenddeleteinsertreverse

java.lang

String

  • String é uma classe imutável
  • Alterações aparentes geram novas instâncias
  • Literais são armazenados no String Pool
  • A classe oferece diversos construtores para criação explícita de objetos

Criação por literal (forma mais comum)

String texto = "Java";
  • Utiliza o String Pool
  • Reutiliza instâncias existentes
  • Forma recomendada na maioria dos casos

Construção explícita com new

String texto = new String("Java");
  • Cria um novo objeto no heap
  • Não reutiliza o String Pool
  • Pouco recomendada, exceto em casos específicos

Construção a partir de outro objeto String

String original = "Java";
String copia = new String(original);
  • Cria uma nova instância com o mesmo conteúdo
  • Útil quando se deseja garantir uma referência distinta

Construção a partir de array de caracteres

char[] letras = {'J', 'a', 'v', 'a'};
String texto = new String(letras);

Também é possível criar uma String a partir de um intervalo do array:

String texto = new String(letras, 1, 3); // "ava"

Construção a partir de array de bytes

byte[] bytes = {65, 66, 67};
String texto = new String(bytes);

Ou especificando o conjunto de caracteres (charset):

String texto = new String(bytes, StandardCharsets.UTF_8);

Construção a partir de StringBuilder ou StringBuffer

StringBuilder sb = new StringBuilder("Java");
String texto = new String(sb);
  • Converte objetos mutáveis em uma String imutável
  • Comum ao finalizar processos de montagem de texto

Construção a partir de objetos genéricos

Object obj = 123;
String texto = String.valueOf(obj);
  • Converte o valor do objeto para sua representação textual
  • Evita NullPointerException em comparação com obj.toString()

Considerações

A classe String oferece diversas formas de construção para atender diferentes necessidades. Sempre que possível, a criação por literais deve ser priorizada, enquanto os construtores são mais utilizados em cenários de conversão, manipulação de dados brutos ou interoperabilidade com APIs.

StringBuilder

A classe StringBuilder é utilizada para representar sequências de caracteres mutáveis, permitindo alterações no conteúdo sem a criação de novos objetos.
Ela pertence ao pacote java.lang e é indicada para cenários onde há muitas concatenações ou modificações de texto.

Características Importantes

  • Objetos StringBuilder são mutáveis
  • Melhor desempenho em concatenações repetidas
  • Não é thread-safe
  • Estruturalmente similar à classe StringBuffer

Construção e Criação

Construtor padrão

Cria um StringBuilder vazio com capacidade inicial padrão.

StringBuilder sb = new StringBuilder();

Construção com valor inicial

StringBuilder sb = new StringBuilder("Java");
  • Inicializa o objeto com o conteúdo informado
  • Permite modificações subsequentes sem criar novas instâncias

Construção com capacidade inicial

StringBuilder sb = new StringBuilder(50);
  • Define a capacidade inicial de caracteres
  • Útil para otimização de memória em textos grandes

Construção a partir de String

String texto = "Java";
StringBuilder sb = new StringBuilder(texto);
  • Muito comum ao preparar textos para concatenações dinâmicas

Conversão para String

Após finalizar as modificações, o conteúdo pode ser convertido para um objeto String.

String resultado = sb.toString();
  • O retorno é uma String imutável
  • Passo comum ao final do processamento de texto

Quando usar StringBuilder

  • Concatenações dentro de loops
  • Construção dinâmica de textos
  • Processamento de grandes volumes de caracteres
  • Cenários de execução em single-thread

StringBuilder vs StringBuffer

CaracterísticaStringBuilderStringBuffer
MutabilidadeSimSim
Thread-safeNãoSim
DesempenhoMais rápidoMais lento
SincronizaçãoNão sincronizadoSincronizado
Uso recomendadoAmbientes simplesAmbientes concorrentes

Considerações finais

  • StringBuilder deve ser a escolha padrão para manipulação de texto em aplicações comuns
  • StringBuffer é indicado apenas quando há necessidade real de acesso concorrente por múltiplas threads
  • Em aplicações modernas, o uso de StringBuffer é menos frequente devido ao custo da sincronização