Sobes.tech
Junior
177

O que sabes sobre a classe String em Java?

Resposta da IA

sobes.tech IA

String em Java é uma classe imutável que representa uma sequência de caracteres.

Principais características:

  • Imutabilidade: Após criar um objeto String, seu conteúdo não pode ser alterado. Qualquer operação que pareça modificar a string, na verdade, retorna um novo objeto String. Isso torna os objetos String seguros para uso em ambientes multithread.
  • Pool de strings (String Pool): Java mantém um pool de strings. Quando um literal de string é criado (por exemplo, "olá"), a JVM verifica primeiro o pool. Se a string já existir, uma referência ao objeto existente é retornada. Caso contrário, um novo objeto é criado no pool. Usando o construtor new String("olá"), um novo objeto é sempre criado fora do pool.
  • Sobrecarga do operador +: O operador + é sobrecarregado para concatenação de strings. O compilador pode otimizar a concatenação usando StringBuilder ou StringBuffer para melhorar o desempenho.
  • Implementação de interfaces: String implementa as interfaces Serializable, Comparable<String> e CharSequence.
  • Métodos: A classe String fornece muitos métodos úteis para trabalhar com strings: length(), charAt(), substring(), indexOf(), equals(), equalsIgnoreCase(), startsWith(), endsWith(), trim(), replace(), split() e outros.

Exemplos de criação de strings:

// Criação por literal (usa o pool de strings)
String str1 = "Hello";

// Criação por construtor (cria um novo objeto fora do pool)
String str2 = new String("World");

// Criação a partir de um array de caracteres
char[] chars = {'J', 'a', 'v', 'a'};
String str3 = new String(chars);

Comparação de strings:

  • equals(): Compara o conteúdo das strings.
  • ==: Compara referências de objetos. Para literais de strings com o mesmo conteúdo, geralmente apontam para a mesma referência no pool, mas para objetos criados com new String(), == será false, mesmo que o conteúdo seja igual.
String s1 = "java";
String s2 = "java";
String s3 = new String("java");

System.out.println(s1 == s2); // true (ambos do pool de strings)
System.out.println(s1 == s3); // false (s3 é um novo objeto)
System.out.println(s1.equals(s3)); // true (compara o conteúdo)

Para modificar strings em Java, usam-se as classes StringBuilder (não sincronizada, para ambientes de thread única) e StringBuffer (sincronizada, para ambientes multithread), que são mutáveis.

// Exemplo com StringBuilder
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
String result = sb.toString(); // Converte de volta para String
System.out.println(result); // Output: Hello World