DEV Community

Matheus de Gondra
Matheus de Gondra

Posted on

Java: a classe String

Java é uma linguagem com tipos primitivos para representar números, como int e long, representar valores booleanos, com o boolean, e representar caracteres, com o char. Mas, como o java representar uma palavra ou um texto?

Array de caracteres

Uma palavra é um conjunto de letra e o java tem o tipo char para representar uma letra. Então, podemos representar uma palavra usando um array de char.

char[] letras = { 'H', 'e', 'l', 'l', 'o' };
for (char letra : letras) {
  System.out.print(letra); // Hello
}
Enter fullscreen mode Exit fullscreen mode

Isso funciona. Mas, não é desse jeito que o java representa um texto. Esse código está mais parecido com um código C.

Classe String

O java não possui um tipo primitivo para representar um texto. Ele usa uma classe chamada String.

A classe String criar uma string imutável e para criar uma string é só usar as aspas "".

String palavra = "Hello";
System.out.println(palavra); // Hello
Enter fullscreen mode Exit fullscreen mode

Como é uma classe, também podemos usar o operador new.

String palavra = new String("Hello");
System.out.println(palavra); // Hello
Enter fullscreen mode Exit fullscreen mode

Porém, não devemos usar o new para criar uma String, porque o java otimiza as strings criando um Pool de Strings.

String Pool

Toda vez que criamos um nova string um novo objeto é criado na memoria heap. Usando string literais " " o java consegue otimizar a memória criando a string dentro de um pool de strings.

O String Pool é uma área que o java cria dentro da memória heap para reutilizar objetos String.

Quando você cria uma string literal, usando aspas, o java primeiro verifica se essa string existe no String Pool. Se não existir ele cria o objeto e devolve a referência para ele, se existir ele só devolve a referência. Isso permite reutilizar objetos String diminuindo o consumo de memória.

Usando o operador new, a string é criada na memória heap, mas fora do String Pool. Com isso, mesmo que você tenta duas strings iguais elas serão objetos diferentes.

String s1 = "Hello";

// a string "Hello" já existe no String Pool então apenas retorna a referência
String s2 = "Hello";

// Um novo objeto é criado fora do String Pool
String s3 = new String("Hello");

// comparando as referências
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false
Enter fullscreen mode Exit fullscreen mode

Métodos

Como eu disse, a string no java é um objeto. Isso significa que ela possuí métodos que nos ajudam na manipulação.

Por ser imutável, toda manipulação gera uma nova string em vez de mudar a string anterior. Por isso, os métodos da classe String sempre retornam algo.

String nome = "Fulano";
String nomeMaiusculo = nome.toUpperCase();
String nomeMinusculo = nome.toLowerCase();

System.out.println(nome); // Fulano
System.out.println(nomeMaiusculo); // FULANO
System.out.println(nomeMinusculo); // fulano
Enter fullscreen mode Exit fullscreen mode

A classe String possui vários métodos, esses são alguns deles:

  • boolean isEmpty(): verifica se a string é vazia.
  • boolean isBlank(): verifica se a string é vazia ou se só tem espaço vazio.
  • boolean startsWith(String prefixo): verifica se a string começa com o prefixo
  • boolean endsWith(String sufixo): verifica se a string termina com o sufixo.
  • String trim(): retorna uma string sem os espaço vazios no inicio e no fim dela.
  • int length(): retorna o tamanho da string.

Conclusão

Espero que ao final dessa leitura você tenha entendido melhor sobre como o java faz para representar textos e como a classe String funciona por baixo dos panos.

Top comments (0)