Classe String
Características da Classe String
- A estrutura subjacente de uma string é um array de bytes (byte[]).
- Todas as strings entre aspas duplas em programas Java são instâncias (objetos) da classe String.
- O conteúdo de uma string não pode ser alterado após sua criação.
- Strings são imutáveis, mas podem ser compartilhadas por meio do pool de constantes de strings.
Pool de Constantes de Strings (StringTable)
Ao criar uma string com aspas duplas, o pool de constantes é verificado. Se a string já existir, ela será reutilizada; caso contrário, será criada no pool.
Localização na memória: antes do JDK 7, no espaço de métodos; a partir do JDK 7, na memória heap.
Diferenças entre Modos de Criação de Strings
- Criação com aspas duplas: A string é mantida no pool de constantes.
- Criação com construtor: Um novo objeto é alocado na memória heap, endependente do pool.
Exemplo: String s2 = new String("abc"); envolve duas etapas: primeiro, a instância "abc" é verificada ou criada no pool; segundo, um novo objeto s2 é criado na heap, copiando o conteúdo do pool. Internamente, s2 armazena a referência à string no pool.
O Java fornece suporte especial para a concatenação de strings usando o operador "+", que internamnete utiliza StringBuilder (ou StringBuffer). A concatenação de constantes de strings é otimizada em tempo de compilação.
Comparação de Conteúdo de Strings
boolean equals(Object anObject): compara esta string com o objeto especificado.boolean equalsIgnoreCase(String anotherString): compara strings ignorando maiúsculas e minúsculas.
Iteração em Strings
Usando char[] toCharArray():
public static void percorrer1(String texto) {
char[] caracteres = texto.toCharArray();
for (int i = 0; i < caracteres.length; i++) {
System.out.println(caracteres[i]);
}
}
Usando char charAt(int index):
public static void percorrer2(String texto) {
int tamanho = texto.length();
for (int i = 0; i < tamanho; i++) {
System.out.println(texto.charAt(i));
}
}
Substituição e Corte de Strings
Substituição com replace e replaceAll:
String frase = "Texto com números 123 e símbolos @#$.";
String limpa = frase.replaceAll("\\d", "");
System.out.println(limpa); // Remove todos os dígitos
Corte com split: para delimitadores especiais como "." ou "+", use escapes: "\\." ou "\\+".
Classe StringBuilder
StringBuilder é eficiente para operações em strings, especialmente cocnatenações. Ao contrário de String, StringBuilder é mutável.
A concatenação com "+" em String cria novos objetos StringBuilder internamente, consumindo memória. Com StringBuilder, as operações ocorrem no mesmo objeto.
StringBuilder sb = new StringBuilder();
sb.append("Primeiro");
sb.append(" segundo");
String resultado = sb.toString(); // Converte para String
StringBuilder aceita qualquer tipo de dado, convertendo-o para string automaticamente.