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
}
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
Como é uma classe, também podemos usar o operador new.
String palavra = new String("Hello");
System.out.println(palavra); // Hello
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
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
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)