Sobes.tech
Junior

Fale-me sobre a classe String na linguagem de programação Java.

sobes.tech IA

Resposta da IA

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

Características principais e particularidades:

  • Imutabilidade: Após criar um objeto String, o seu conteúdo não pode ser alterado. Qualquer operação que pareça modificar a string (por exemplo, concatenação) na verdade cria um novo objeto String. Isto melhora a segurança e a segurança em ambientes multithread.
  • Sobrecarga do operador +: Para strings, o operador + foi sobrecarregado para realizar concatenação.
  • Duas formas de criação:
    • Com um literal de string: String s1 = "Hello"; - criado no pool de strings (String Pool).
    • Com o operador new: String s2 = new String("World"); - criado no heap, pode criar um novo objeto mesmo que já exista um literal igual no pool.
  • Pool de strings (String Pool): Área no heap onde os literais de strings são armazenados para otimizar a memória. Ao criar um literal de string, a JVM verifica primeiro o pool. Se a string já existir, uma referência a esse objeto é retornada. Caso contrário, um novo objeto é criado e adicionado ao pool.
  • Métodos úteis principais:
    • length(): Retorna o comprimento da string.
    • charAt(int index): Retorna o caractere na posição especificada.
    • substring(int beginIndex, int endIndex): Retorna uma subcadeia.
    • contains(CharSequence s): Verifica se a string contém a sequência de caracteres especificada.
    • indexOf(int ch) / indexOf(String str): Retorna a primeira posição da ocorrência do caractere ou subcadeia.
    • equals(Object anObject): Compara o conteúdo das strings. É importante usar equals() para comparar conteúdo, não ==, que compara referências.
    • equalsIgnoreCase(String anotherString): Compara strings sem distinguir maiúsculas/minúsculas.
    • replace(char oldChar, char newChar) / replace(CharSequence target, CharSequence replacement): Substitui caracteres ou subcadeias.
    • trim(): Remove espaços em branco no início e no fim.
    • split(String regex): Divide a string em subcadeias com base no delimitador.

Exemplo de criação e algumas operações:

// Criação com literal
String str1 = "Java";

// Criação com new
String str2 = new String("Java");

// Concatenação
String str3 = str1 + " is amazing";

// Comparação de conteúdo (usando equals, não ==)
boolean areEqualContent = str1.equals(str2); // true

// Comparação de referências (usando ==)
boolean areEqualReference = (str1 == str2); // false

// Comprimento da string
int length = str3.length();

// Obter caractere
char firstChar = str1.charAt(0); // 'J'

// Verificação de inclusão
boolean containsIs = str3.contains("is"); // true

A imutabilidade de String pode levar a ineficiências em modificações repetidas de strings, pois um novo objeto é criado a cada vez. Para esses cenários, é preferível usar StringBuilder ou StringBuffer.