Strings
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.
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
Stringimutá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
NullPointerExceptionem comparação comobj.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
StringBuildersã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
Stringimutá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ística | StringBuilder | StringBuffer |
|---|---|---|
| Mutabilidade | Sim | Sim |
| Thread-safe | Não | Sim |
| Desempenho | Mais rápido | Mais lento |
| Sincronização | Não sincronizado | Sincronizado |
| Uso recomendado | Ambientes simples | Ambientes concorrentes |
Considerações finais
StringBuilderdeve ser a escolha padrão para manipulação de texto em aplicações comunsStringBufferé 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
Java Doc
String
java.lang
StringBuilder